@morscherlab/mint-sdk 1.3.9 → 1.4.0-beta.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +152 -177
- package/dist/ActionMenu-CScINahU.js +445 -0
- package/dist/ActionMenu-CScINahU.js.map +1 -0
- package/dist/AppSidebar-BmiiPfz9.js +3514 -0
- package/dist/AppSidebar-BmiiPfz9.js.map +1 -0
- package/dist/{experiment-utils-DTANyVKV.js → BaseModal-DfRIuVoj.js} +74 -149
- package/dist/BaseModal-DfRIuVoj.js.map +1 -0
- package/dist/ConfirmDialog-CJ7hqYUP.js +102 -0
- package/dist/ConfirmDialog-CJ7hqYUP.js.map +1 -0
- package/dist/ExperimentPopover-C4sGw-is.js +359 -0
- package/dist/ExperimentPopover-C4sGw-is.js.map +1 -0
- package/dist/ExperimentSelectorModal-D-9z7cNx.js +527 -0
- package/dist/ExperimentSelectorModal-D-9z7cNx.js.map +1 -0
- package/dist/SegmentedControl-DERBN-Xd.js +129 -0
- package/dist/SegmentedControl-DERBN-Xd.js.map +1 -0
- package/dist/SettingsModal-CSLE31yg.js +666 -0
- package/dist/SettingsModal-CSLE31yg.js.map +1 -0
- package/dist/analysisArtifactTypes-Cy3D0Ipg.js.map +1 -1
- package/dist/auth-SliLnFre.js +65 -0
- package/dist/auth-SliLnFre.js.map +1 -0
- package/dist/components/ActionMenu.vue.d.ts +1 -1
- package/dist/components/AdductText.vue.d.ts +1 -1
- package/dist/components/AlertBox.vue.d.ts +3 -3
- package/dist/components/AppContainer.vue.d.ts +1 -1
- package/dist/components/AppSidebar.vue.d.ts +14 -94
- package/dist/components/AppTopBar.vue.d.ts +16 -70
- package/dist/components/ArtifactSaveDialog.vue.d.ts +4 -4
- package/dist/components/ArtifactSelectorModal.vue.d.ts +4 -4
- package/dist/components/AuditTrail.vue.d.ts +2 -2
- package/dist/components/BaseButton.vue.d.ts +11 -4
- package/dist/components/BaseCheckbox.vue.d.ts +9 -3
- package/dist/components/BaseInput.vue.d.ts +13 -9
- package/dist/components/BaseModal.vue.d.ts +4 -4
- package/dist/components/BasePill.vue.d.ts +15 -8
- package/dist/components/BaseRadioGroup.vue.d.ts +2 -2
- package/dist/components/BaseSelect.vue.d.ts +51 -19
- package/dist/components/BaseTabs.vue.d.ts +6 -5
- package/dist/components/BatchProgressList.vue.d.ts +2 -2
- package/dist/components/ChartContainer.vue.d.ts +2 -2
- package/dist/components/ChemicalFormula.vue.d.ts +2 -2
- package/dist/components/CollapsibleCard.vue.d.ts +3 -3
- package/dist/components/ComponentBindingRenderer.vue.d.ts +2 -3
- package/dist/components/ConcentrationInput.vue.d.ts +2 -2
- package/dist/components/ConfirmDialog.vue.d.ts +8 -7
- package/dist/components/DataFrame.vue.d.ts +32 -74
- package/dist/components/DatePicker.vue.d.ts +24 -2
- package/dist/components/DoseCalculator.vue.d.ts +1 -1
- package/dist/components/DoseCalculatorVolumeField.vue.d.ts +1 -1
- package/dist/components/EmptyState.vue.d.ts +3 -2
- package/dist/components/ExperimentSelectorModal.vue.d.ts +3 -3
- package/dist/components/FormBuilder.vue.d.ts +17 -74
- package/dist/components/FormulaInput.vue.d.ts +2 -2
- package/dist/components/GeneratedPluginView.vue.d.ts +1 -1
- package/dist/components/GeneratedResultRenderer.vue.d.ts +5 -1
- package/dist/components/{StatusIndicator.vue.d.ts → InstrumentStatusPanels.vue.d.ts} +8 -9
- package/dist/components/JobsStatusTray.vue.d.ts +2 -9
- package/dist/components/LoadingSpinner.vue.d.ts +3 -3
- package/dist/components/MoleculeInput.vue.d.ts +2 -2
- package/dist/components/NumberInput.vue.d.ts +19 -5
- package/dist/components/PlateEditor.vue.d.ts +11 -61
- package/dist/components/PlotlyChart.vue.d.ts +2 -2
- package/dist/components/PluginIcon.vue.d.ts +5 -1
- package/dist/components/PluginWorkspaceView.controls.d.ts +2 -9
- package/dist/components/PluginWorkspaceView.navigation.d.ts +1 -7
- package/dist/components/PluginWorkspaceView.props.d.ts +18 -137
- package/dist/components/PluginWorkspaceView.shell.d.ts +2 -10
- package/dist/components/PluginWorkspaceView.vue.d.ts +14 -84
- package/dist/components/PresenceAvatars.vue.d.ts +31 -0
- package/dist/components/ProgressBar.vue.d.ts +3 -2
- package/dist/components/ProtocolStep.presentation.d.ts +0 -1
- package/dist/components/SampleHierarchyTree.vue.d.ts +3 -3
- package/dist/components/SampleSelector.vue.d.ts +3 -3
- package/dist/components/ScheduleCalendar.vue.d.ts +1 -1
- package/dist/components/ScientificNumber.vue.d.ts +1 -1
- package/dist/components/SecretInput.vue.d.ts +2 -2
- package/dist/components/SegmentedControl.vue.d.ts +2 -2
- package/dist/components/SequenceInput.vue.d.ts +2 -2
- package/dist/components/SettingsModal.vue.d.ts +12 -20
- package/dist/components/SmartGroup.types.d.ts +0 -1
- package/dist/components/SmartGroupFieldRecipe.vue.d.ts +1 -1
- package/dist/components/StaleFormBanner.vue.d.ts +20 -0
- package/dist/components/TagsInput.vue.d.ts +4 -3
- package/dist/components/TimeRangeInput.vue.d.ts +2 -2
- package/dist/components/VersionConflictDialog.vue.d.ts +24 -0
- package/dist/components/WellPlate.geometry.d.ts +0 -6
- package/dist/components/WellPlate.rendering.d.ts +0 -2
- package/dist/components/WellPlate.vue.d.ts +7 -52
- package/dist/components/index.d.ts +0 -90
- package/dist/components/{AutoGroupModal.adapter.d.ts → internal/AutoGroupModalInternal.adapter.d.ts} +6 -6
- package/dist/components/{AutoGroupModal.vue.d.ts → internal/AutoGroupModalInternal.vue.d.ts} +6 -6
- package/dist/components/{BaseToggle.vue.d.ts → internal/CheckboxSwitchInternal.vue.d.ts} +2 -2
- package/dist/components/internal/DatePickerDateInternal.vue.d.ts +22 -0
- package/dist/components/{DateTimePicker.vue.d.ts → internal/DatePickerDateTimeInternal.vue.d.ts} +2 -2
- package/dist/components/{TimePicker.vue.d.ts → internal/DatePickerTimeInternal.vue.d.ts} +3 -3
- package/dist/components/internal/FilePickerListInternal.vue.d.ts +2 -2
- package/dist/components/internal/FormSchemaInternal.vue.d.ts +95 -0
- package/dist/components/{UnitInput.vue.d.ts → internal/NumberUnitInputInternal.vue.d.ts} +6 -14
- package/dist/components/internal/PlateEditorBindingInternal.vue.d.ts +3 -2
- package/dist/components/internal/ResourcePickerListInternal.vue.d.ts +3 -3
- package/dist/components/{MultiSelect.vue.d.ts → internal/SelectMultipleInternal.vue.d.ts} +11 -8
- package/dist/components/{SearchableSelect.vue.d.ts → internal/SelectSearchableInternal.vue.d.ts} +5 -2
- package/dist/components/internal/WorkspaceShellInternal.vue.d.ts +1 -15
- package/dist/components/internal/WorkspaceSidebarInternal.vue.d.ts +4 -4
- package/dist/{composables → components/internal}/autoGroup/classKey.d.ts +1 -1
- package/dist/{composables → components/internal}/autoGroup/classify.d.ts +1 -1
- package/dist/{composables → components/internal}/autoGroup/columns.d.ts +1 -1
- package/dist/{composables → components/internal}/autoGroup/compose.d.ts +1 -1
- package/dist/{composables → components/internal}/autoGroup/cooccurrence.d.ts +1 -1
- package/dist/{composables → components/internal}/autoGroup/csv-shim.d.ts +1 -1
- package/dist/{composables → components/internal}/autoGroup/fingerprint.d.ts +1 -1
- package/dist/{composables → components/internal}/autoGroup/template.d.ts +1 -1
- package/dist/{composables → components/internal}/autoGroup/tokenLength.d.ts +1 -1
- package/dist/components/internal/generatedJobsApi.d.ts +1 -1
- package/dist/{composables → components/internal}/useAutoGroup.d.ts +9 -18
- package/dist/composables/componentSpecs.d.ts +41 -0
- package/dist/composables/controlComponentBindings.d.ts +6 -0
- package/dist/composables/controlSchemaAdapters.d.ts +28 -2
- package/dist/composables/controlSchemaDoseDesign.d.ts +1 -1
- package/dist/composables/controlSchemaModel.d.ts +1 -1
- package/dist/composables/controlSchemaTypes.d.ts +35 -23
- package/dist/composables/{usePluginClient.d.ts → createClient.d.ts} +20 -49
- package/dist/composables/{useEventStream.d.ts → eventStream.d.ts} +2 -2
- package/dist/composables/experiment-utils.d.ts +1 -6
- package/dist/composables/index.d.ts +6 -59
- package/dist/composables/platformContextHelpers.d.ts +0 -11
- package/dist/composables/pluginEndpointBuilder.d.ts +2 -2
- package/dist/composables/pluginWorkspaceModel.d.ts +14 -97
- package/dist/composables/useApi.d.ts +1 -3
- package/dist/composables/useAppExperiment.d.ts +1 -1
- package/dist/composables/{useAnalysisArtifacts.d.ts → useArtifacts.d.ts} +6 -6
- package/dist/composables/useExperiment.d.ts +30 -0
- package/dist/composables/useFilePicker.d.ts +2 -2
- package/dist/composables/useJobCenter.d.ts +63 -0
- package/dist/composables/{useGeneratedAnalysis.d.ts → useJobsEndpoint.d.ts} +22 -23
- package/dist/composables/useMenuKeyboard.d.ts +1 -1
- package/dist/composables/usePlatform.d.ts +63 -0
- package/dist/composables/usePluginWorkspace.d.ts +6 -11
- package/dist/composables/usePresence.d.ts +41 -0
- package/dist/composables/useRackEditor.d.ts +2 -2
- package/dist/composables/useRealtime.d.ts +71 -0
- package/dist/composables/{useRequestSyncState.d.ts → useRequest.d.ts} +12 -17
- package/dist/composables/useToast.d.ts +7 -5
- package/dist/composables/useVersionedSave.d.ts +76 -0
- package/dist/controlSchemaModel-CP5-_nAj.js +95 -0
- package/dist/controlSchemaModel-CP5-_nAj.js.map +1 -0
- package/dist/data-C2PwI_dn.js +3811 -0
- package/dist/data-C2PwI_dn.js.map +1 -0
- package/dist/data.d.ts +32 -0
- package/dist/data.js +10 -0
- package/dist/deprecatedRootExports.d.ts +191 -0
- package/dist/experiment-43OJtH7R.js +673 -0
- package/dist/experiment-43OJtH7R.js.map +1 -0
- package/dist/experimentStatus-BZmU4czV.js +60 -0
- package/dist/experimentStatus-BZmU4czV.js.map +1 -0
- package/dist/host.d.ts +10 -0
- package/dist/host.js +26 -0
- package/dist/host.js.map +1 -0
- package/dist/index.d.ts +1 -12
- package/dist/index.js +65 -277
- package/dist/index.js.map +1 -1
- package/dist/install-DAID6c2-.js +668 -0
- package/dist/install-DAID6c2-.js.map +1 -0
- package/dist/install.d.ts +2 -1
- package/dist/install.js +1 -21
- package/dist/instrument.d.ts +0 -6
- package/dist/lab-DLwRl_Ql.js +7513 -0
- package/dist/lab-DLwRl_Ql.js.map +1 -0
- package/dist/lab.d.ts +42 -0
- package/dist/lab.js +4 -0
- package/dist/permissions.d.ts +0 -4
- package/dist/permissions.js +1 -20
- package/dist/permissions.js.map +1 -1
- package/dist/records-BzTcxekG.js +3070 -0
- package/dist/records-BzTcxekG.js.map +1 -0
- package/dist/runtime-D6gVat6r.js +1495 -0
- package/dist/runtime-D6gVat6r.js.map +1 -0
- package/dist/runtime.d.ts +25 -0
- package/dist/runtime.js +8 -0
- package/dist/shell-5ju97nOS.js +197 -0
- package/dist/shell-5ju97nOS.js.map +1 -0
- package/dist/shell.d.ts +16 -0
- package/dist/shell.js +8 -0
- package/dist/stores/auth.d.ts +13 -35
- package/dist/stores/experiment.d.ts +4 -0
- package/dist/stores/index.js +2 -2
- package/dist/styles.css +12030 -14845
- package/dist/types/analysisArtifactTypes.d.ts +1 -1
- package/dist/types/auth.d.ts +0 -8
- package/dist/types/componentLabTypes.d.ts +98 -34
- package/dist/types/componentWorkflowTypes.d.ts +0 -27
- package/dist/types/components.d.ts +145 -74
- package/dist/types/form-builder.d.ts +4 -0
- package/dist/types/generated/platformContext.d.ts +52 -0
- package/dist/types/generated-ui.d.ts +2 -2
- package/dist/types/index.d.ts +4 -5
- package/dist/types/instrument.d.ts +41 -0
- package/dist/types/platform.d.ts +20 -58
- package/dist/useDebouncedWatch-BPwyl6eS.js +73 -0
- package/dist/useDebouncedWatch-BPwyl6eS.js.map +1 -0
- package/dist/useExpansionSet-CvoNMZJi.js +68 -0
- package/dist/useExpansionSet-CvoNMZJi.js.map +1 -0
- package/dist/useExperimentSamples-CxcnxZ8h.js +366 -0
- package/dist/useExperimentSamples-CxcnxZ8h.js.map +1 -0
- package/dist/useListReorder-CcbEYxX-.js +5462 -0
- package/dist/useListReorder-CcbEYxX-.js.map +1 -0
- package/dist/useRackEditor-BD5NIo5s.js +5916 -0
- package/dist/useRackEditor-BD5NIo5s.js.map +1 -0
- package/dist/useRealtime-PalKue84.js +696 -0
- package/dist/useRealtime-PalKue84.js.map +1 -0
- package/dist/useRequest-D5JDfsgZ.js +76 -0
- package/dist/useRequest-D5JDfsgZ.js.map +1 -0
- package/dist/utils/color.d.ts +0 -5
- package/dist/{composables/useDoseCalculator.d.ts → utils/dose.d.ts} +10 -13
- package/dist/utils/experimentStatus.d.ts +9 -0
- package/dist/{composables/useChemicalFormula.d.ts → utils/formula.d.ts} +3 -6
- package/dist/utils/integrationHost.d.ts +18 -0
- package/dist/utils/plotlyTemplate.d.ts +2 -0
- package/dist/utils/pluginSecrets.d.ts +12 -12
- package/dist/utils/presenceAvatars.d.ts +30 -0
- package/dist/utils/records.d.ts +0 -2
- package/dist/{composables/useTimeUtils.d.ts → utils/time.d.ts} +0 -18
- package/package.json +20 -17
- package/src/__tests__/components/ActionMenu.test.ts +0 -13
- package/src/__tests__/components/AlertBox.test.ts +1 -1
- package/src/__tests__/components/AppSidebar.test.ts +119 -167
- package/src/__tests__/components/AppToastContainer.test.ts +2 -2
- package/src/__tests__/components/AppTopBar.test.ts +181 -176
- package/src/__tests__/components/ArtifactSaveDialog.test.ts +5 -3
- package/src/__tests__/components/ArtifactSelectorModal.test.ts +6 -4
- package/src/__tests__/components/AuditTrail.test.ts +1 -1
- package/src/__tests__/components/AutoGroupModal.adapter.test.ts +1 -1
- package/src/__tests__/components/AutoGroupModal.anatomy.test.ts +2 -2
- package/src/__tests__/components/AutoGroupModal.wiring.test.ts +2 -2
- package/src/__tests__/components/BaseButton.test.ts +51 -0
- package/src/__tests__/components/{BaseToggle.test.ts → BaseCheckbox.switch.test.ts} +8 -6
- package/src/__tests__/components/BaseInput.test.ts +13 -34
- package/src/__tests__/components/BaseModal.test.ts +6 -6
- package/src/__tests__/components/BasePill.test.ts +33 -39
- package/src/__tests__/components/{MultiSelect.test.ts → BaseSelect.multiple.test.ts} +16 -7
- package/src/__tests__/components/{SearchableSelect.test.ts → BaseSelect.searchable.test.ts} +19 -9
- package/src/__tests__/components/BaseSelect.test.ts +10 -0
- package/src/__tests__/components/BaseTabs.test.ts +13 -13
- package/src/__tests__/components/CollapsibleCard.test.ts +1 -1
- package/src/__tests__/components/ComponentBindingRenderer.test.ts +25 -73
- package/src/__tests__/components/ConcentrationInput.test.ts +3 -3
- package/src/__tests__/components/ConfirmDialog.test.ts +23 -0
- package/src/__tests__/components/DataFrame.test.ts +140 -142
- package/src/__tests__/components/DataStates.test.ts +6 -22
- package/src/__tests__/components/{DateTimePicker.test.ts → DatePicker.datetime.test.ts} +9 -7
- package/src/__tests__/components/{TimePicker.test.ts → DatePicker.time.test.ts} +18 -17
- package/src/__tests__/components/DoseCalculator.test.ts +12 -7
- package/src/__tests__/components/DoseCalculatorVolumeField.test.ts +6 -6
- package/src/__tests__/components/ExperimentSelectorModal.test.ts +15 -15
- package/src/__tests__/components/FormBuilder.test.ts +49 -167
- package/src/__tests__/components/FormSchemaInternal.test.ts +91 -0
- package/src/__tests__/components/GeneratedPathInput.test.ts +18 -13
- package/src/__tests__/components/GeneratedPluginView.test.ts +38 -24
- package/src/__tests__/components/GeneratedResultRenderer.test.ts +6 -4
- package/src/__tests__/components/InstrumentStatusPanels.test.ts +79 -0
- package/src/__tests__/components/JobsStatusTray.test.ts +4 -4
- package/src/__tests__/components/NumberInput.test.ts +28 -0
- package/src/__tests__/components/{UnitInput.test.ts → NumberInput.units.test.ts} +6 -6
- package/src/__tests__/components/PlateEditor.test.ts +108 -108
- package/src/__tests__/components/PlateEditorBindingInternal.test.ts +13 -13
- package/src/__tests__/components/PlotlyChart.test.ts +1 -1
- package/src/__tests__/components/PluginIcon.test.ts +9 -4
- package/src/__tests__/components/PluginWorkspaceView.controls.test.ts +16 -29
- package/src/__tests__/components/PluginWorkspaceView.internal.test.ts +28 -34
- package/src/__tests__/components/PluginWorkspaceView.navigation.test.ts +4 -19
- package/src/__tests__/components/PluginWorkspaceView.shell.test.ts +1 -6
- package/src/__tests__/components/PluginWorkspaceView.test.ts +176 -155
- package/src/__tests__/components/PresenceAvatars.test.ts +90 -0
- package/src/__tests__/components/ProtocolStep.presentation.test.ts +1 -3
- package/src/__tests__/components/ProtocolStepEditor.test.ts +10 -11
- package/src/__tests__/components/ProtocolStepParameterField.test.ts +8 -7
- package/src/__tests__/components/ResourcePickerListInternal.test.ts +2 -2
- package/src/__tests__/components/RetiredStyles.test.ts +0 -18
- package/src/__tests__/components/SampleSelector.test.ts +17 -17
- package/src/__tests__/components/SecretInput.test.ts +14 -19
- package/src/__tests__/components/SettingsModal.test.ts +76 -84
- package/src/__tests__/components/StaleFormBanner.test.ts +48 -0
- package/src/__tests__/components/ThemeToggle.test.ts +1 -1
- package/src/__tests__/components/WellPlate.decoration.test.ts +10 -8
- package/src/__tests__/components/WellPlate.interaction.test.ts +6 -7
- package/src/__tests__/components/WellPlate.keyboard.test.ts +2 -2
- package/src/__tests__/components/deprecationTags.test.ts +90 -0
- package/src/__tests__/composables/analysisArtifactTarget.test.ts +1 -12
- package/src/__tests__/composables/autoGroup/classKey.test.ts +1 -1
- package/src/__tests__/composables/autoGroup/classify.test.ts +1 -1
- package/src/__tests__/composables/autoGroup/columns.test.ts +1 -1
- package/src/__tests__/composables/autoGroup/compose.test.ts +1 -1
- package/src/__tests__/composables/autoGroup/cooccurrence.test.ts +1 -1
- package/src/__tests__/composables/autoGroup/fieldEdits.test.ts +1 -1
- package/src/__tests__/composables/autoGroup/fingerprint.test.ts +1 -1
- package/src/__tests__/composables/autoGroup/golden.test.ts +1 -1
- package/src/__tests__/composables/autoGroup/groupByOrder.test.ts +1 -1
- package/src/__tests__/composables/autoGroup/groupTree.test.ts +1 -1
- package/src/__tests__/composables/autoGroup/integration.test.ts +1 -1
- package/src/__tests__/composables/autoGroup/template.test.ts +1 -1
- package/src/__tests__/composables/autoGroup/tokenLength.test.ts +1 -1
- package/src/__tests__/composables/autoGroup/tokenize.test.ts +1 -1
- package/src/__tests__/composables/{usePluginClient.test.ts → createClient.test.ts} +84 -222
- package/src/__tests__/composables/{useEventStream.test.ts → eventStream.test.ts} +6 -6
- package/src/__tests__/composables/experiment-utils.test.ts +13 -14
- package/src/__tests__/composables/useApi.test.ts +32 -21
- package/src/__tests__/composables/useAppExperiment.test.ts +19 -2
- package/src/__tests__/composables/{useAnalysisArtifacts.test.ts → useArtifacts.test.ts} +19 -27
- package/src/__tests__/composables/useAutoGroup.test.ts +3 -13
- package/src/__tests__/composables/useControlSchema.test.ts +41 -99
- package/src/__tests__/composables/useExperiment.test.ts +63 -0
- package/src/__tests__/composables/useFileBrowser.test.ts +4 -6
- package/src/__tests__/composables/{useJobsStatusTray.test.ts → useJobCenter.test.ts} +31 -31
- package/src/__tests__/composables/{useGeneratedAnalysis.test.ts → useJobsEndpoint.test.ts} +213 -139
- package/src/__tests__/composables/usePlatform.test.ts +102 -0
- package/src/__tests__/composables/usePresence.test.ts +164 -0
- package/src/__tests__/composables/useRackEditor.test.ts +2 -2
- package/src/__tests__/composables/useRealtime.test.ts +196 -0
- package/src/__tests__/composables/{useRequestSyncState.test.ts → useRequest.test.ts} +32 -47
- package/src/__tests__/composables/useVersionedSave.test.ts +194 -0
- package/src/__tests__/docs/extractDocsComponents.test.ts +36 -0
- package/src/__tests__/docs/extractDocsParsing.test.ts +2 -2
- package/src/__tests__/docs/extractDocsTheme.test.ts +1 -46
- package/src/__tests__/docs/frontendDocsCatalog.test.ts +164 -84
- package/src/__tests__/styles/baseControlsRules.test.ts +1 -1
- package/src/__tests__/styles/darkModeRules.test.ts +0 -6
- package/src/__tests__/{composables/useChemicalFormula.test.ts → utils/formula.test.ts} +3 -5
- package/src/__tests__/utils/permissions.test.ts +1 -36
- package/src/__tests__/utils/plotlyTemplate.test.ts +16 -1
- package/src/__tests__/{composables/useTimeUtils.test.ts → utils/time.test.ts} +2 -9
- package/src/components/ActionMenu.vue +7 -13
- package/src/components/AlertBox.story.vue +25 -25
- package/src/components/AlertBox.vue +8 -8
- package/src/components/AppLayout.story.vue +33 -44
- package/src/components/AppLayout.vue +1 -1
- package/src/components/AppSidebar.story.vue +40 -73
- package/src/components/AppSidebar.vue +66 -147
- package/src/components/AppToastContainer.story.vue +1 -1
- package/src/components/AppTopBar.story.vue +51 -100
- package/src/components/AppTopBar.vue +74 -198
- package/src/components/ArtifactSaveDialog.story.vue +9 -9
- package/src/components/ArtifactSaveDialog.vue +23 -26
- package/src/components/ArtifactSelectorModal.story.vue +4 -4
- package/src/components/ArtifactSelectorModal.vue +10 -10
- package/src/components/AuditTrail.story.vue +4 -4
- package/src/components/AuditTrail.vue +3 -3
- package/src/components/Avatar.story.vue +2 -3
- package/src/components/Avatar.vue +1 -2
- package/src/components/BaseButton.story.vue +25 -0
- package/src/components/BaseButton.vue +39 -10
- package/src/components/BaseCheckbox.story.vue +2 -2
- package/src/components/{BaseToggle.story.vue → BaseCheckbox.switch.story.vue} +22 -19
- package/src/components/BaseCheckbox.vue +39 -7
- package/src/components/BaseInput.story.vue +3 -15
- package/src/components/{BaseTextarea.story.vue → BaseInput.textarea.story.vue} +14 -10
- package/src/components/BaseInput.vue +53 -26
- package/src/components/BaseModal.story.vue +11 -11
- package/src/components/BaseModal.vue +8 -8
- package/src/components/BasePill.story.vue +48 -28
- package/src/components/BasePill.vue +22 -11
- package/src/components/BaseRadioGroup.story.vue +4 -4
- package/src/components/BaseRadioGroup.vue +3 -3
- package/src/components/{MultiSelect.story.vue → BaseSelect.multiple.story.vue} +20 -14
- package/src/components/{SearchableSelect.story.vue → BaseSelect.searchable.story.vue} +4 -4
- package/src/components/BaseSelect.story.vue +2 -2
- package/src/components/BaseSelect.vue +117 -22
- package/src/components/BaseTabs.story.vue +20 -20
- package/src/components/BaseTabs.vue +17 -9
- package/src/components/BatchProgressList.vue +3 -3
- package/src/components/ChartContainer.story.vue +8 -13
- package/src/components/ChartContainer.vue +3 -3
- package/src/components/ChemicalFormula.vue +1 -2
- package/src/components/CollapsibleCard.vue +5 -4
- package/src/components/ComponentBindingRenderer.story.vue +0 -29
- package/src/components/ComponentBindingRenderer.vue +15 -39
- package/src/components/ConcentrationInput.story.vue +2 -2
- package/src/components/ConcentrationInput.vue +9 -9
- package/src/components/ConfirmDialog.story.vue +21 -21
- package/src/components/ConfirmDialog.vue +15 -14
- package/src/components/DataFrame.story.vue +28 -40
- package/src/components/DataFrame.vue +112 -128
- package/src/components/{DateTimePicker.story.vue → DatePicker.datetime.story.vue} +19 -14
- package/src/components/DatePicker.story.vue +2 -2
- package/src/components/{TimePicker.story.vue → DatePicker.time.story.vue} +15 -12
- package/src/components/DatePicker.vue +82 -220
- package/src/components/DoseCalculator.vue +13 -19
- package/src/components/DoseCalculatorVolumeField.vue +6 -6
- package/src/components/EmptyState.story.vue +17 -17
- package/src/components/EmptyState.vue +5 -4
- package/src/components/ExperimentPopover.story.vue +1 -1
- package/src/components/ExperimentPopover.vue +4 -4
- package/src/components/ExperimentSelectorModal.story.vue +5 -5
- package/src/components/ExperimentSelectorModal.vue +11 -13
- package/src/components/FilePicker.vue +1 -1
- package/src/components/FormBuilder.story.vue +9 -4
- package/src/components/FormBuilder.vue +46 -253
- package/src/components/FormField.story.vue +1 -2
- package/src/components/FormulaInput.story.vue +2 -2
- package/src/components/FormulaInput.vue +5 -6
- package/src/components/GeneratedPathInput.vue +8 -9
- package/src/components/GeneratedPluginView.story.vue +1 -1
- package/src/components/GeneratedPluginView.vue +23 -22
- package/src/components/GeneratedResultRenderer.vue +16 -17
- package/src/components/InstrumentStatusPanels.story.vue +64 -0
- package/src/components/InstrumentStatusPanels.vue +133 -0
- package/src/components/JobsStatusTray.story.vue +2 -2
- package/src/components/JobsStatusTray.vue +4 -19
- package/src/components/LoadingSpinner.story.vue +11 -11
- package/src/components/LoadingSpinner.vue +6 -4
- package/src/components/MoleculeInput.story.vue +2 -2
- package/src/components/MoleculeInput.vue +3 -3
- package/src/components/NumberInput.story.vue +55 -15
- package/src/components/NumberInput.vue +80 -18
- package/src/components/PlateEditor.story.vue +51 -43
- package/src/components/PlateEditor.vue +97 -128
- package/src/components/PlotlyChart.story.vue +1 -1
- package/src/components/PlotlyChart.vue +6 -4
- package/src/components/PluginIcon.story.vue +9 -6
- package/src/components/PluginIcon.vue +7 -2
- package/src/components/PluginWorkspaceView.controls.ts +9 -29
- package/src/components/PluginWorkspaceView.navigation.ts +2 -23
- package/src/components/PluginWorkspaceView.props.ts +17 -151
- package/src/components/PluginWorkspaceView.shell.ts +13 -24
- package/src/components/PluginWorkspaceView.story.vue +64 -62
- package/src/components/PluginWorkspaceView.vue +21 -78
- package/src/components/PresenceAvatars.story.vue +75 -0
- package/src/components/PresenceAvatars.vue +114 -0
- package/src/components/ProgressBar.story.vue +7 -7
- package/src/components/ProgressBar.vue +4 -3
- package/src/components/ProtocolStep.presentation.ts +0 -11
- package/src/components/ProtocolStepEditor.vue +6 -5
- package/src/components/ProtocolStepParameterField.vue +15 -12
- package/src/components/SampleSelector.colors.ts +1 -1
- package/src/components/SampleSelector.vue +6 -6
- package/src/components/ScheduleCalendar.vue +4 -4
- package/src/components/SecretInput.story.vue +1 -1
- package/src/components/SecretInput.vue +16 -25
- package/src/components/SegmentedControl.story.vue +7 -7
- package/src/components/SegmentedControl.vue +5 -3
- package/src/components/SequenceInput.story.vue +2 -2
- package/src/components/SequenceInput.vue +3 -3
- package/src/components/SettingsModal.story.vue +13 -14
- package/src/components/SettingsModal.vue +29 -47
- package/src/components/SmartGroup.types.ts +4 -6
- package/src/components/SmartGroupFieldRecipe.vue +7 -5
- package/src/components/StaleFormBanner.story.vue +90 -0
- package/src/components/StaleFormBanner.vue +83 -0
- package/src/components/TagsInput.story.vue +7 -7
- package/src/components/TagsInput.vue +7 -6
- package/src/components/ThemeToggle.vue +5 -30
- package/src/components/TimeRangeInput.story.vue +1 -1
- package/src/components/TimeRangeInput.vue +10 -8
- package/src/components/VersionConflictDialog.story.vue +60 -0
- package/src/components/VersionConflictDialog.vue +79 -0
- package/src/components/WellPlate.geometry.ts +0 -38
- package/src/components/WellPlate.rendering.ts +0 -13
- package/src/components/WellPlate.story.vue +61 -50
- package/src/components/WellPlate.vue +61 -87
- package/src/components/index.ts +3 -105
- package/src/components/{AutoGroupModal.adapter.ts → internal/AutoGroupModalInternal.adapter.ts} +8 -8
- package/src/components/{AutoGroupModal.vue → internal/AutoGroupModalInternal.vue} +23 -23
- package/src/components/{BaseToggle.vue → internal/CheckboxSwitchInternal.vue} +8 -8
- package/src/components/internal/DataStateInternal.vue +1 -1
- package/src/components/internal/DatePickerDateInternal.vue +243 -0
- package/src/components/{DateTimePicker.vue → internal/DatePickerDateTimeInternal.vue} +9 -9
- package/src/components/{TimePicker.vue → internal/DatePickerTimeInternal.vue} +7 -7
- package/src/components/internal/FilePickerListInternal.vue +8 -14
- package/src/components/{FormActions.vue → internal/FormActionsInternal.vue} +2 -2
- package/src/components/internal/FormFieldRendererInternal.vue +1 -1
- package/src/components/internal/FormSchemaInternal.vue +253 -0
- package/src/components/{UnitInput.vue → internal/NumberUnitInputInternal.vue} +28 -28
- package/src/components/internal/PlateEditorBindingInternal.vue +8 -7
- package/src/components/internal/ResourcePickerListInternal.vue +4 -4
- package/src/components/{MultiSelect.vue → internal/SelectMultipleInternal.vue} +21 -15
- package/src/components/{SearchableSelect.vue → internal/SelectSearchableInternal.vue} +24 -8
- package/src/components/internal/WellEditPopupInternal.vue +4 -9
- package/src/components/internal/WorkspaceShellInternal.vue +3 -36
- package/src/components/internal/WorkspaceSidebarInternal.vue +4 -25
- package/src/{composables → components/internal}/autoGroup/classKey.ts +1 -1
- package/src/{composables → components/internal}/autoGroup/classify.ts +1 -1
- package/src/{composables → components/internal}/autoGroup/columns.ts +1 -1
- package/src/{composables → components/internal}/autoGroup/compose.ts +3 -3
- package/src/{composables → components/internal}/autoGroup/cooccurrence.ts +1 -1
- package/src/{composables → components/internal}/autoGroup/csv-shim.ts +1 -1
- package/src/{composables → components/internal}/autoGroup/fingerprint.ts +1 -1
- package/src/{composables → components/internal}/autoGroup/index.ts +1 -2
- package/src/{composables → components/internal}/autoGroup/template.ts +1 -1
- package/src/{composables → components/internal}/autoGroup/tokenLength.ts +1 -1
- package/src/components/internal/generatedJobsApi.ts +1 -1
- package/src/{composables → components/internal}/useAutoGroup.ts +3 -57
- package/src/composables/componentSpecs.ts +62 -0
- package/src/composables/controlComponentBindings.ts +7 -0
- package/src/composables/controlSchemaAdapters.ts +45 -7
- package/src/composables/controlSchemaDoseDesign.ts +16 -5
- package/src/composables/controlSchemaModel.ts +1 -1
- package/src/composables/controlSchemaTypes.ts +31 -22
- package/src/composables/{usePluginClient.ts → createClient.ts} +52 -190
- package/src/composables/{useEventStream.ts → eventStream.ts} +3 -3
- package/src/composables/experiment-utils.ts +1 -39
- package/src/composables/formBuilderRegistry.ts +6 -12
- package/src/composables/index.ts +16 -480
- package/src/composables/platformContextHelpers.ts +0 -57
- package/src/composables/pluginEndpointBuilder.ts +8 -10
- package/src/composables/pluginWorkspaceModel.ts +14 -105
- package/src/composables/useApi.ts +18 -30
- package/src/composables/useAppExperiment.ts +6 -5
- package/src/composables/{useAnalysisArtifacts.ts → useArtifacts.ts} +18 -19
- package/src/composables/useControlSchema.ts +5 -9
- package/src/composables/useControlWorkspace.ts +4 -7
- package/src/composables/useExperiment.ts +49 -0
- package/src/composables/useExperimentData.ts +4 -4
- package/src/composables/useExperimentSelector.ts +5 -5
- package/src/composables/useFileBrowser.ts +5 -13
- package/src/composables/useFilePicker.ts +2 -2
- package/src/composables/useFormBuilder.ts +3 -4
- package/src/composables/useJobCenter.ts +324 -0
- package/src/composables/{useGeneratedAnalysis.ts → useJobsEndpoint.ts} +53 -67
- package/src/composables/useMenuKeyboard.ts +1 -1
- package/src/composables/usePlatform.ts +95 -0
- package/src/composables/usePlatformFilePickerAdapter.ts +2 -1
- package/src/composables/usePluginWorkspace.ts +62 -107
- package/src/composables/usePresence.ts +110 -0
- package/src/composables/useRackEditor.ts +3 -3
- package/src/composables/useRealtime.ts +194 -0
- package/src/composables/{useRequestSyncState.ts → useRequest.ts} +25 -48
- package/src/composables/useScheduleCalendarLayout.ts +1 -1
- package/src/composables/useToast.ts +14 -11
- package/src/composables/useVersionedSave.ts +165 -0
- package/src/data.ts +130 -0
- package/src/deprecatedRootExports.ts +226 -0
- package/src/generated/schema.ts +1 -0
- package/src/host.ts +27 -0
- package/src/index.ts +2 -71
- package/src/install.ts +15 -2
- package/src/instrument.ts +1 -6
- package/src/lab.ts +128 -0
- package/src/permissions.ts +0 -27
- package/src/runtime.ts +145 -0
- package/src/shell.ts +103 -0
- package/src/stores/auth.ts +26 -162
- package/src/stores/experiment.ts +27 -1
- package/src/styles/components/action-menu.css +0 -5
- package/src/styles/components/alert-box.css +18 -0
- package/src/styles/components/app-top-bar.css +7 -48
- package/src/styles/components/button.css +12 -0
- package/src/styles/components/checkbox.css +1 -1
- package/src/styles/components/collapsible-card.css +1 -1
- package/src/styles/components/confirm-dialog.css +18 -2
- package/src/styles/components/empty-state.css +4 -2
- package/src/styles/components/file-picker.css +1 -1
- package/src/styles/components/icon-button.css +1 -1
- package/src/styles/components/loading-spinner.css +9 -12
- package/src/styles/components/multi-select.css +6 -1
- package/src/styles/components/pill.css +40 -35
- package/src/styles/components/plugin-icon.css +9 -0
- package/src/styles/components/presence-avatars.css +194 -0
- package/src/styles/components/progress-bar.css +2 -0
- package/src/styles/components/searchable-select.css +3 -0
- package/src/styles/components/smart-group.css +1 -6
- package/src/styles/components/textarea.css +1 -1
- package/src/styles/components/toggle.css +2 -2
- package/src/styles/components/version-conflict.css +122 -0
- package/src/styles/components/well-plate.css +0 -7
- package/src/styles/index.css +2 -11
- package/src/styles/variables.css +1 -527
- package/src/types/analysisArtifactTypes.ts +1 -1
- package/src/types/auth.ts +0 -10
- package/src/types/componentLabTypes.ts +103 -53
- package/src/types/componentWorkflowTypes.ts +2 -33
- package/src/types/components.ts +148 -114
- package/src/types/form-builder.ts +4 -0
- package/src/types/generated/platformContext.ts +59 -0
- package/src/types/generated-ui.ts +2 -2
- package/src/types/index.ts +15 -53
- package/src/types/instrument.ts +27 -0
- package/src/types/platform.ts +25 -89
- package/src/utils/color.ts +1 -12
- package/src/utils/dose.ts +335 -0
- package/src/utils/experimentStatus.ts +43 -0
- package/src/utils/formula.ts +292 -0
- package/src/utils/integrationHost.ts +27 -0
- package/src/utils/plotlyTemplate.ts +6 -0
- package/src/utils/pluginSecrets.ts +23 -23
- package/src/utils/presenceAvatars.ts +53 -0
- package/src/utils/records.ts +0 -5
- package/src/{composables/useTimeUtils.ts → utils/time.ts} +0 -21
- package/dist/ResourcePickerListInternal-CFAw4vTZ.js +0 -605
- package/dist/ResourcePickerListInternal-CFAw4vTZ.js.map +0 -1
- package/dist/__tests__/composables/useBioTemplatePackWorkspace.test.d.ts +0 -1
- package/dist/__tests__/composables/useBioTemplatePresetWorkspace.test.d.ts +0 -1
- package/dist/__tests__/composables/useBioTemplateWorkspace.test.d.ts +0 -1
- package/dist/__tests__/composables/useChemicalFormula.test.d.ts +0 -1
- package/dist/__tests__/composables/useEventStream.test.d.ts +0 -1
- package/dist/__tests__/composables/useExperimentSave.test.d.ts +0 -1
- package/dist/__tests__/composables/useGeneratedAnalysis.test.d.ts +0 -1
- package/dist/__tests__/composables/useGroupAssignment.test.d.ts +0 -1
- package/dist/__tests__/composables/useJobsStatusTray.test.d.ts +0 -1
- package/dist/__tests__/composables/useMobileSupportGate.test.d.ts +0 -1
- package/dist/__tests__/composables/usePlatformContext.test.d.ts +0 -1
- package/dist/__tests__/composables/usePluginClient.test.d.ts +0 -1
- package/dist/__tests__/composables/usePresenceHeartbeat.test.d.ts +0 -1
- package/dist/__tests__/composables/useRequestSyncState.test.d.ts +0 -1
- package/dist/__tests__/composables/useRuntimeAlignment.test.d.ts +0 -1
- package/dist/__tests__/composables/useTemplateCollection.test.d.ts +0 -1
- package/dist/__tests__/composables/useTimeUtils.test.d.ts +0 -1
- package/dist/__tests__/docs/extractDocsTemplates.test.d.ts +0 -1
- package/dist/__tests__/templates/templates.test.d.ts +0 -1
- package/dist/__tests__/templates/templatesDeprecation.test.d.ts +0 -1
- package/dist/__tests__/utils/lcms.test.d.ts +0 -1
- package/dist/__tests__/utils/rack.test.d.ts +0 -1
- package/dist/components/AppAvatarMenu.vue.d.ts +0 -47
- package/dist/components/AppTopBar.navigation.d.ts +0 -10
- package/dist/components/BaseTextarea.vue.d.ts +0 -31
- package/dist/components/BioTemplateExperimentWorkspaceView.vue.d.ts +0 -112
- package/dist/components/BioTemplatePackWorkspaceView.vue.d.ts +0 -86
- package/dist/components/BioTemplatePresetWorkspaceView.vue.d.ts +0 -80
- package/dist/components/BioTemplateRenderer.vue.d.ts +0 -30
- package/dist/components/ControlWorkspaceView.vue.d.ts +0 -138
- package/dist/components/DoseDesignWorkspaceView.vue.d.ts +0 -140
- package/dist/components/ExperimentDataViewer.vue.d.ts +0 -54
- package/dist/components/ExperimentTimeline.vue.d.ts +0 -70
- package/dist/components/FitPanel.vue.d.ts +0 -56
- package/dist/components/GroupAssigner.vue.d.ts +0 -26
- package/dist/components/IconButton.vue.d.ts +0 -30
- package/dist/components/MobileSupportGate.vue.d.ts +0 -32
- package/dist/components/ReagentEditor.vue.d.ts +0 -31
- package/dist/components/ReagentList.presentation.d.ts +0 -17
- package/dist/components/ReagentList.vue.d.ts +0 -58
- package/dist/components/SampleLegend.vue.d.ts +0 -33
- package/dist/components/SmartGroupModal.vue.d.ts +0 -29
- package/dist/components/index.js +0 -5
- package/dist/components-BOA5e7kb.js +0 -23137
- package/dist/components-BOA5e7kb.js.map +0 -1
- package/dist/composables/flattenWorkspaceBindings.d.ts +0 -61
- package/dist/composables/index.js +0 -7
- package/dist/composables/useBioTemplateComponents.d.ts +0 -34
- package/dist/composables/useBioTemplateControls.d.ts +0 -10
- package/dist/composables/useBioTemplatePackWorkspace.d.ts +0 -56
- package/dist/composables/useBioTemplatePresetWorkspace.d.ts +0 -79
- package/dist/composables/useBioTemplateWorkspace.d.ts +0 -39
- package/dist/composables/useExperimentSave.d.ts +0 -69
- package/dist/composables/useGroupAssignment.d.ts +0 -35
- package/dist/composables/useJobsStatusTray.d.ts +0 -87
- package/dist/composables/useMobileSupportGate.d.ts +0 -14
- package/dist/composables/usePlatformContext.d.ts +0 -218
- package/dist/composables/usePresenceHeartbeat.d.ts +0 -49
- package/dist/composables/useRuntimeAlignment.d.ts +0 -44
- package/dist/composables/useTemplateCollection.d.ts +0 -62
- package/dist/composables/workspaceRecipes.d.ts +0 -189
- package/dist/composables-izSQH8Ky.js +0 -591
- package/dist/composables-izSQH8Ky.js.map +0 -1
- package/dist/experiment-D49y_Kro.js +0 -459
- package/dist/experiment-D49y_Kro.js.map +0 -1
- package/dist/experiment-utils-DTANyVKV.js.map +0 -1
- package/dist/install.js.map +0 -1
- package/dist/lcms.d.ts +0 -38
- package/dist/settings-BG6v13Zq.js +0 -341
- package/dist/settings-BG6v13Zq.js.map +0 -1
- package/dist/tailwind.preset.d.ts +0 -63
- package/dist/tailwind.preset.js +0 -71
- package/dist/tailwind.preset.js.map +0 -1
- package/dist/templates/adapters.d.ts +0 -19
- package/dist/templates/assayLookups.d.ts +0 -3
- package/dist/templates/assayMatrixAdapters.d.ts +0 -13
- package/dist/templates/assayMatrixBuilder.d.ts +0 -3
- package/dist/templates/assayNormalizers.d.ts +0 -4
- package/dist/templates/builderIdUtils.d.ts +0 -4
- package/dist/templates/builderPresetControls.d.ts +0 -11
- package/dist/templates/builderReadUtils.d.ts +0 -8
- package/dist/templates/builders.d.ts +0 -26
- package/dist/templates/calibrationCurveAdapters.d.ts +0 -7
- package/dist/templates/calibrationCurveBuilder.d.ts +0 -3
- package/dist/templates/calibrationNormalizers.d.ts +0 -5
- package/dist/templates/catalog.d.ts +0 -192
- package/dist/templates/componentBindingCatalog.d.ts +0 -25
- package/dist/templates/componentBindingHelpers.d.ts +0 -17
- package/dist/templates/componentBindings.d.ts +0 -97
- package/dist/templates/componentDoseResponseProps.d.ts +0 -3
- package/dist/templates/componentGenericProps.d.ts +0 -8
- package/dist/templates/componentPlateHelpers.d.ts +0 -11
- package/dist/templates/componentPlateMapProps.d.ts +0 -3
- package/dist/templates/componentPropsFactory.d.ts +0 -3
- package/dist/templates/componentQpcrPlateProps.d.ts +0 -3
- package/dist/templates/componentTargetResolvers.d.ts +0 -5
- package/dist/templates/componentTemplateProps.d.ts +0 -3
- package/dist/templates/controlSchemaClone.d.ts +0 -4
- package/dist/templates/controlSchemaConstants.d.ts +0 -10
- package/dist/templates/controlSchemaMerge.d.ts +0 -3
- package/dist/templates/controlSchemaTargets.d.ts +0 -17
- package/dist/templates/controlSchemaTypes.d.ts +0 -4
- package/dist/templates/controlSchemas.d.ts +0 -34
- package/dist/templates/defaultBioTemplateBuilder.d.ts +0 -3
- package/dist/templates/doseResponseAdapters.d.ts +0 -6
- package/dist/templates/doseResponseBuilder.d.ts +0 -3
- package/dist/templates/elisaAssayCollectionBuilder.d.ts +0 -3
- package/dist/templates/flowCytometryAssayCollectionBuilder.d.ts +0 -3
- package/dist/templates/flowCytometryPanelBuilder.d.ts +0 -3
- package/dist/templates/flowNormalizers.d.ts +0 -8
- package/dist/templates/flowPanelAdapters.d.ts +0 -7
- package/dist/templates/index.d.ts +0 -15
- package/dist/templates/index.js +0 -2
- package/dist/templates/instrumentRunAdapterHelpers.d.ts +0 -8
- package/dist/templates/instrumentRunAdapters.d.ts +0 -19
- package/dist/templates/instrumentRunBuilder.d.ts +0 -3
- package/dist/templates/lcmsBatchCollectionBuilder.d.ts +0 -3
- package/dist/templates/lookup.d.ts +0 -4
- package/dist/templates/packs.d.ts +0 -21
- package/dist/templates/plateMapAdapters.d.ts +0 -5
- package/dist/templates/plateMapBuilder.d.ts +0 -3
- package/dist/templates/presetControlSchemas.d.ts +0 -534
- package/dist/templates/presets.d.ts +0 -106
- package/dist/templates/protocolAdapters.d.ts +0 -9
- package/dist/templates/protocolNormalizers.d.ts +0 -6
- package/dist/templates/protocolStepsBuilder.d.ts +0 -3
- package/dist/templates/qpcrAdapters.d.ts +0 -9
- package/dist/templates/qpcrExpressionCollectionBuilder.d.ts +0 -3
- package/dist/templates/qpcrPlateBuilder.d.ts +0 -3
- package/dist/templates/reagentAdapters.d.ts +0 -9
- package/dist/templates/reagentListBuilder.d.ts +0 -3
- package/dist/templates/runNormalizers.d.ts +0 -10
- package/dist/templates/sampleNormalizers.d.ts +0 -4
- package/dist/templates/samplePrepAdapters.d.ts +0 -7
- package/dist/templates/samplePrepBuilder.d.ts +0 -3
- package/dist/templates/sampleSheetAdapters.d.ts +0 -9
- package/dist/templates/sampleSheetBuilder.d.ts +0 -3
- package/dist/templates/targetedMetabolomicsCollectionBuilder.d.ts +0 -3
- package/dist/templates/targetedMetabolomicsHelpers.d.ts +0 -5
- package/dist/templates/templateAdapterTypes.d.ts +0 -48
- package/dist/templates/templateControlSchemas.d.ts +0 -400
- package/dist/templates/templateCreateOptions.d.ts +0 -165
- package/dist/templates/templateEnvelopes.d.ts +0 -17
- package/dist/templates/templatePackCollectionBuilder.d.ts +0 -3
- package/dist/templates/templatePresetCollectionBuilder.d.ts +0 -20
- package/dist/templates/templateQpcrTypes.d.ts +0 -42
- package/dist/templates/templateValidators.d.ts +0 -25
- package/dist/templates/timeCourseAdapters.d.ts +0 -9
- package/dist/templates/timeCourseBuilder.d.ts +0 -3
- package/dist/templates/types.d.ts +0 -304
- package/dist/templates/wellPlateScreenCollectionBuilder.d.ts +0 -3
- package/dist/templates/westernBlotAssayCollectionBuilder.d.ts +0 -3
- package/dist/templates-B2DB0MCM.js +0 -12304
- package/dist/templates-B2DB0MCM.js.map +0 -1
- package/dist/utils/rack.d.ts +0 -63
- package/dist/validation-C_eH_vIg.js +0 -7999
- package/dist/validation-C_eH_vIg.js.map +0 -1
- package/src/__tests__/components/AppAvatarMenu.test.ts +0 -186
- package/src/__tests__/components/AppTopBar.navigation.test.ts +0 -68
- package/src/__tests__/components/AppTopBarPresence.test.ts +0 -47
- package/src/__tests__/components/BioTemplateExperimentWorkspaceView.test.ts +0 -159
- package/src/__tests__/components/BioTemplatePackWorkspaceView.test.ts +0 -192
- package/src/__tests__/components/BioTemplatePresetWorkspaceView.test.ts +0 -307
- package/src/__tests__/components/BioTemplateRenderer.test.ts +0 -96
- package/src/__tests__/components/ControlWorkspaceView.test.ts +0 -1100
- package/src/__tests__/components/DoseDesignWorkspaceView.test.ts +0 -183
- package/src/__tests__/components/ExperimentTimeline.test.ts +0 -108
- package/src/__tests__/components/FitPanel.test.ts +0 -96
- package/src/__tests__/components/GroupAssigner.test.ts +0 -101
- package/src/__tests__/components/MobileSupportGate.test.ts +0 -120
- package/src/__tests__/components/ReagentList.presentation.test.ts +0 -73
- package/src/__tests__/components/ReagentList.test.ts +0 -167
- package/src/__tests__/components/SampleLegend.test.ts +0 -18
- package/src/__tests__/components/SmartGroupModal.test.ts +0 -69
- package/src/__tests__/components/WellPlate.sampleTypeIndicator.test.ts +0 -58
- package/src/__tests__/components/iconButtonIconSizing.test.ts +0 -18
- package/src/__tests__/composables/useBioTemplatePackWorkspace.test.ts +0 -125
- package/src/__tests__/composables/useBioTemplatePresetWorkspace.test.ts +0 -199
- package/src/__tests__/composables/useBioTemplateWorkspace.test.ts +0 -104
- package/src/__tests__/composables/useExperimentSave.test.ts +0 -542
- package/src/__tests__/composables/useGroupAssignment.test.ts +0 -73
- package/src/__tests__/composables/useMobileSupportGate.test.ts +0 -74
- package/src/__tests__/composables/usePlatformContext.test.ts +0 -148
- package/src/__tests__/composables/usePresenceHeartbeat.test.ts +0 -164
- package/src/__tests__/composables/useRuntimeAlignment.test.ts +0 -145
- package/src/__tests__/composables/useTemplateCollection.test.ts +0 -147
- package/src/__tests__/docs/extractDocsTemplates.test.ts +0 -53
- package/src/__tests__/fixtures/templates/dose-response.json +0 -81
- package/src/__tests__/fixtures/templates/plate-map.json +0 -54
- package/src/__tests__/fixtures/templates/qpcr-plate.json +0 -96
- package/src/__tests__/fixtures/templates/sample-sheet.json +0 -71
- package/src/__tests__/templates/templates.test.ts +0 -1235
- package/src/__tests__/templates/templatesDeprecation.test.ts +0 -78
- package/src/__tests__/utils/lcms.test.ts +0 -73
- package/src/__tests__/utils/rack.test.ts +0 -120
- package/src/components/AppAvatarMenu.story.vue +0 -155
- package/src/components/AppAvatarMenu.vue +0 -154
- package/src/components/AppTopBar.navigation.ts +0 -60
- package/src/components/AutoGroupModal.story.vue +0 -458
- package/src/components/BaseTextarea.vue +0 -58
- package/src/components/BioTemplateExperimentWorkspaceView.story.vue +0 -123
- package/src/components/BioTemplateExperimentWorkspaceView.vue +0 -339
- package/src/components/BioTemplatePackWorkspaceView.story.vue +0 -107
- package/src/components/BioTemplatePackWorkspaceView.vue +0 -180
- package/src/components/BioTemplatePresetWorkspaceView.story.vue +0 -163
- package/src/components/BioTemplatePresetWorkspaceView.vue +0 -403
- package/src/components/BioTemplateRenderer.story.vue +0 -57
- package/src/components/BioTemplateRenderer.vue +0 -64
- package/src/components/ControlWorkspaceView.story.vue +0 -347
- package/src/components/ControlWorkspaceView.vue +0 -370
- package/src/components/DoseDesignWorkspaceView.story.vue +0 -77
- package/src/components/DoseDesignWorkspaceView.vue +0 -243
- package/src/components/ExperimentDataViewer.story.vue +0 -177
- package/src/components/ExperimentDataViewer.vue +0 -313
- package/src/components/ExperimentTimeline.story.vue +0 -208
- package/src/components/ExperimentTimeline.vue +0 -383
- package/src/components/FitPanel.story.vue +0 -191
- package/src/components/FitPanel.vue +0 -168
- package/src/components/FormActions.story.vue +0 -96
- package/src/components/GroupAssigner.story.vue +0 -83
- package/src/components/GroupAssigner.vue +0 -319
- package/src/components/IconButton.story.vue +0 -140
- package/src/components/IconButton.vue +0 -69
- package/src/components/MobileSupportGate.story.vue +0 -52
- package/src/components/MobileSupportGate.vue +0 -111
- package/src/components/ReagentEditor.story.vue +0 -153
- package/src/components/ReagentEditor.vue +0 -414
- package/src/components/ReagentList.presentation.ts +0 -106
- package/src/components/ReagentList.story.vue +0 -155
- package/src/components/ReagentList.vue +0 -438
- package/src/components/SampleLegend.story.vue +0 -91
- package/src/components/SampleLegend.vue +0 -121
- package/src/components/SmartGroupModal.story.vue +0 -61
- package/src/components/SmartGroupModal.vue +0 -61
- package/src/components/StatusIndicator.story.vue +0 -99
- package/src/components/StatusIndicator.vue +0 -36
- package/src/components/UnitInput.story.vue +0 -194
- package/src/composables/flattenWorkspaceBindings.ts +0 -104
- package/src/composables/useBioTemplateComponents.ts +0 -117
- package/src/composables/useBioTemplateControls.ts +0 -45
- package/src/composables/useBioTemplatePackWorkspace.ts +0 -201
- package/src/composables/useBioTemplatePresetWorkspace.ts +0 -329
- package/src/composables/useBioTemplateWorkspace.ts +0 -120
- package/src/composables/useChemicalFormula.ts +0 -301
- package/src/composables/useDoseCalculator.ts +0 -370
- package/src/composables/useExperimentSave.ts +0 -348
- package/src/composables/useGroupAssignment.ts +0 -152
- package/src/composables/useJobsStatusTray.ts +0 -493
- package/src/composables/useMobileSupportGate.ts +0 -80
- package/src/composables/usePlatformContext.ts +0 -299
- package/src/composables/usePresenceHeartbeat.ts +0 -201
- package/src/composables/useRuntimeAlignment.ts +0 -184
- package/src/composables/useTemplateCollection.ts +0 -233
- package/src/composables/workspaceRecipes.ts +0 -268
- package/src/lcms.ts +0 -119
- package/src/styles/components/app-avatar-menu.css +0 -121
- package/src/styles/components/experiment-data-viewer.css +0 -138
- package/src/styles/components/experiment-timeline.css +0 -572
- package/src/styles/components/fit-panel.css +0 -153
- package/src/styles/components/group-assigner.css +0 -198
- package/src/styles/components/mobile-support-gate.css +0 -117
- package/src/styles/components/reagent-editor.css +0 -501
- package/src/styles/components/reagent-list.css +0 -408
- package/src/styles/components/sample-legend.css +0 -212
- package/src/styles/components/status-indicator.css +0 -66
- package/src/styles/components/theme-toggle.css +0 -6
- package/src/tailwind.preset.ts +0 -66
- package/src/templates/adapters.ts +0 -141
- package/src/templates/assayLookups.ts +0 -33
- package/src/templates/assayMatrixAdapters.ts +0 -85
- package/src/templates/assayMatrixBuilder.ts +0 -60
- package/src/templates/assayNormalizers.ts +0 -34
- package/src/templates/builderIdUtils.ts +0 -20
- package/src/templates/builderPresetControls.ts +0 -166
- package/src/templates/builderReadUtils.ts +0 -55
- package/src/templates/builders.ts +0 -122
- package/src/templates/calibrationCurveAdapters.ts +0 -62
- package/src/templates/calibrationCurveBuilder.ts +0 -100
- package/src/templates/calibrationNormalizers.ts +0 -60
- package/src/templates/catalog.ts +0 -249
- package/src/templates/componentBindingCatalog.ts +0 -90
- package/src/templates/componentBindingHelpers.ts +0 -93
- package/src/templates/componentBindings.ts +0 -279
- package/src/templates/componentDoseResponseProps.ts +0 -41
- package/src/templates/componentGenericProps.ts +0 -77
- package/src/templates/componentPlateHelpers.ts +0 -52
- package/src/templates/componentPlateMapProps.ts +0 -34
- package/src/templates/componentPropsFactory.ts +0 -21
- package/src/templates/componentQpcrPlateProps.ts +0 -27
- package/src/templates/componentTargetResolvers.ts +0 -67
- package/src/templates/componentTemplateProps.ts +0 -78
- package/src/templates/controlSchemaClone.ts +0 -32
- package/src/templates/controlSchemaConstants.ts +0 -11
- package/src/templates/controlSchemaMerge.ts +0 -40
- package/src/templates/controlSchemaTargets.ts +0 -85
- package/src/templates/controlSchemaTypes.ts +0 -20
- package/src/templates/controlSchemas.ts +0 -113
- package/src/templates/defaultBioTemplateBuilder.ts +0 -125
- package/src/templates/doseResponseAdapters.ts +0 -36
- package/src/templates/doseResponseBuilder.ts +0 -45
- package/src/templates/elisaAssayCollectionBuilder.ts +0 -63
- package/src/templates/flowCytometryAssayCollectionBuilder.ts +0 -42
- package/src/templates/flowCytometryPanelBuilder.ts +0 -54
- package/src/templates/flowNormalizers.ts +0 -58
- package/src/templates/flowPanelAdapters.ts +0 -61
- package/src/templates/index.ts +0 -330
- package/src/templates/instrumentRunAdapterHelpers.ts +0 -94
- package/src/templates/instrumentRunAdapters.ts +0 -174
- package/src/templates/instrumentRunBuilder.ts +0 -98
- package/src/templates/lcmsBatchCollectionBuilder.ts +0 -39
- package/src/templates/lookup.ts +0 -18
- package/src/templates/packs.ts +0 -166
- package/src/templates/plateMapAdapters.ts +0 -38
- package/src/templates/plateMapBuilder.ts +0 -44
- package/src/templates/presetControlSchemas.ts +0 -258
- package/src/templates/presets.ts +0 -183
- package/src/templates/protocolAdapters.ts +0 -73
- package/src/templates/protocolNormalizers.ts +0 -37
- package/src/templates/protocolStepsBuilder.ts +0 -37
- package/src/templates/qpcrAdapters.ts +0 -108
- package/src/templates/qpcrExpressionCollectionBuilder.ts +0 -34
- package/src/templates/qpcrPlateBuilder.ts +0 -97
- package/src/templates/reagentAdapters.ts +0 -81
- package/src/templates/reagentListBuilder.ts +0 -31
- package/src/templates/runNormalizers.ts +0 -63
- package/src/templates/sampleNormalizers.ts +0 -58
- package/src/templates/samplePrepAdapters.ts +0 -66
- package/src/templates/samplePrepBuilder.ts +0 -52
- package/src/templates/sampleSheetAdapters.ts +0 -79
- package/src/templates/sampleSheetBuilder.ts +0 -24
- package/src/templates/targetedMetabolomicsCollectionBuilder.ts +0 -80
- package/src/templates/targetedMetabolomicsHelpers.ts +0 -102
- package/src/templates/templateAdapterTypes.ts +0 -58
- package/src/templates/templateControlSchemas.ts +0 -320
- package/src/templates/templateCreateOptions.ts +0 -208
- package/src/templates/templateEnvelopes.ts +0 -145
- package/src/templates/templatePackCollectionBuilder.ts +0 -24
- package/src/templates/templatePresetCollectionBuilder.ts +0 -141
- package/src/templates/templateQpcrTypes.ts +0 -48
- package/src/templates/templateValidators.ts +0 -426
- package/src/templates/timeCourseAdapters.ts +0 -77
- package/src/templates/timeCourseBuilder.ts +0 -65
- package/src/templates/types.ts +0 -493
- package/src/templates/wellPlateScreenCollectionBuilder.ts +0 -37
- package/src/templates/westernBlotAssayCollectionBuilder.ts +0 -69
- package/src/utils/rack.ts +0 -225
- /package/dist/__tests__/components/{AppAvatarMenu.test.d.ts → BaseButton.test.d.ts} +0 -0
- /package/dist/__tests__/components/{AppTopBar.navigation.test.d.ts → BaseCheckbox.switch.test.d.ts} +0 -0
- /package/dist/__tests__/components/{AppTopBarPresence.test.d.ts → BaseSelect.multiple.test.d.ts} +0 -0
- /package/dist/__tests__/components/{BaseToggle.test.d.ts → BaseSelect.searchable.test.d.ts} +0 -0
- /package/dist/__tests__/components/{BioTemplateExperimentWorkspaceView.test.d.ts → ConfirmDialog.test.d.ts} +0 -0
- /package/dist/__tests__/components/{BioTemplatePackWorkspaceView.test.d.ts → DatePicker.datetime.test.d.ts} +0 -0
- /package/dist/__tests__/components/{BioTemplatePresetWorkspaceView.test.d.ts → DatePicker.time.test.d.ts} +0 -0
- /package/dist/__tests__/components/{BioTemplateRenderer.test.d.ts → FormSchemaInternal.test.d.ts} +0 -0
- /package/dist/__tests__/components/{ControlWorkspaceView.test.d.ts → InstrumentStatusPanels.test.d.ts} +0 -0
- /package/dist/__tests__/components/{DateTimePicker.test.d.ts → NumberInput.units.test.d.ts} +0 -0
- /package/dist/__tests__/components/{DoseDesignWorkspaceView.test.d.ts → PresenceAvatars.test.d.ts} +0 -0
- /package/dist/__tests__/components/{ExperimentTimeline.test.d.ts → StaleFormBanner.test.d.ts} +0 -0
- /package/dist/__tests__/components/{FitPanel.test.d.ts → deprecationTags.test.d.ts} +0 -0
- /package/dist/__tests__/{components/GroupAssigner.test.d.ts → composables/createClient.test.d.ts} +0 -0
- /package/dist/__tests__/{components/MobileSupportGate.test.d.ts → composables/eventStream.test.d.ts} +0 -0
- /package/dist/__tests__/{components/MultiSelect.test.d.ts → composables/useArtifacts.test.d.ts} +0 -0
- /package/dist/__tests__/{components/ReagentList.presentation.test.d.ts → composables/useExperiment.test.d.ts} +0 -0
- /package/dist/__tests__/{components/ReagentList.test.d.ts → composables/useJobCenter.test.d.ts} +0 -0
- /package/dist/__tests__/{components/SampleLegend.test.d.ts → composables/useJobsEndpoint.test.d.ts} +0 -0
- /package/dist/__tests__/{components/SearchableSelect.test.d.ts → composables/usePlatform.test.d.ts} +0 -0
- /package/dist/__tests__/{components/SmartGroupModal.test.d.ts → composables/usePresence.test.d.ts} +0 -0
- /package/dist/__tests__/{components/TimePicker.test.d.ts → composables/useRealtime.test.d.ts} +0 -0
- /package/dist/__tests__/{components/UnitInput.test.d.ts → composables/useRequest.test.d.ts} +0 -0
- /package/dist/__tests__/{components/WellPlate.sampleTypeIndicator.test.d.ts → composables/useVersionedSave.test.d.ts} +0 -0
- /package/dist/__tests__/{components/iconButtonIconSizing.test.d.ts → utils/formula.test.d.ts} +0 -0
- /package/dist/__tests__/{composables/useAnalysisArtifacts.test.d.ts → utils/time.test.d.ts} +0 -0
- /package/dist/components/{FormActions.vue.d.ts → internal/FormActionsInternal.vue.d.ts} +0 -0
- /package/dist/{composables → components/internal}/autoGroup/colors.d.ts +0 -0
- /package/dist/{composables → components/internal}/autoGroup/index.d.ts +0 -0
- /package/dist/{composables → components/internal}/autoGroup/tokenize.d.ts +0 -0
- /package/src/{composables → components/internal}/autoGroup/colors.ts +0 -0
- /package/src/{composables → components/internal}/autoGroup/tokenize.ts +0 -0
- /package/src/{composables → components/internal}/autoGroup/vocab.json +0 -0
|
@@ -1,13 +1,11 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
resolveCurrentExperimentId,
|
|
4
|
-
} from './platformContextHelpers'
|
|
1
|
+
import { getInjectedPlatformContext } from './platformContextHelpers'
|
|
2
|
+
import { useExperimentStore } from '../stores/experiment'
|
|
5
3
|
import type {
|
|
6
|
-
|
|
4
|
+
BuildEndpointUrlOptions,
|
|
7
5
|
PluginContract,
|
|
8
6
|
PluginEndpointDefinition,
|
|
9
7
|
PluginEndpointParamDefinition,
|
|
10
|
-
} from './
|
|
8
|
+
} from './createClient'
|
|
11
9
|
|
|
12
10
|
function normalizeApiBaseUrl(baseUrl: string | undefined): string | undefined {
|
|
13
11
|
if (!baseUrl) return undefined
|
|
@@ -94,8 +92,8 @@ function withDefaultPathParams(
|
|
|
94
92
|
continue
|
|
95
93
|
}
|
|
96
94
|
if (isExperimentPathParam(fieldName) || isExperimentPathParam(name)) {
|
|
97
|
-
const experimentId =
|
|
98
|
-
if (experimentId !==
|
|
95
|
+
const experimentId = useExperimentStore().currentId
|
|
96
|
+
if (experimentId !== null) {
|
|
99
97
|
nextPayload[fieldName] = experimentId
|
|
100
98
|
}
|
|
101
99
|
}
|
|
@@ -254,11 +252,11 @@ function joinBaseUrl(baseUrl: string, path: string): string {
|
|
|
254
252
|
}
|
|
255
253
|
|
|
256
254
|
/** Build the concrete URL for a generated plugin endpoint without making a request. */
|
|
257
|
-
export function
|
|
255
|
+
export function buildEndpointUrl(
|
|
258
256
|
contract: PluginContract,
|
|
259
257
|
endpoint: PluginEndpointDefinition,
|
|
260
258
|
payload?: unknown,
|
|
261
|
-
options:
|
|
259
|
+
options: BuildEndpointUrlOptions = {},
|
|
262
260
|
): string {
|
|
263
261
|
const parts = pluginEndpointRequestParts(contract, endpoint, payload, options.baseUrl)
|
|
264
262
|
const pathWithQuery = `${parts.path}${queryString(parts.query)}`
|
|
@@ -1,31 +1,22 @@
|
|
|
1
1
|
import type {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
PillNavItemInput,
|
|
5
|
-
SidebarToolSection,
|
|
6
|
-
TopBarSettingsConfig,
|
|
7
|
-
TopBarVariant,
|
|
2
|
+
PluginWorkspaceSidebarSpec,
|
|
3
|
+
PluginWorkspaceTopBarSpec,
|
|
8
4
|
} from '../types'
|
|
9
|
-
import type { FormEnhancements, FormSchema } from '../types/form-builder'
|
|
10
5
|
import type {
|
|
11
6
|
ControlComponentBinding,
|
|
12
7
|
ControlComponentBindingsById,
|
|
13
|
-
ControlModel,
|
|
14
|
-
ControlModelBinding,
|
|
15
|
-
ControlSchema,
|
|
16
|
-
ControlWorkspaceOptions,
|
|
17
8
|
} from './useControlSchema'
|
|
18
9
|
|
|
19
10
|
/**
|
|
20
11
|
* Scoped-slot payload shared by PluginWorkspaceView's `default`, `topbar`, and `sidebar`
|
|
21
12
|
* slots: the resolved active view plus the values and component bindings/props derived
|
|
22
|
-
* from the
|
|
13
|
+
* from the sidebar control model. WorkspaceControlsInternal renders a component's default
|
|
23
14
|
* slot bound to exactly this shape.
|
|
24
15
|
*/
|
|
25
16
|
export interface PluginWorkspaceControlsModel {
|
|
26
17
|
/** Currently resolved workspace view id. */
|
|
27
18
|
activeView: string
|
|
28
|
-
/** Sets the active view, updating any uncontrolled state and emitting `update:
|
|
19
|
+
/** Sets the active view, updating any uncontrolled state and emitting `update:view`. */
|
|
29
20
|
setActiveView: (viewId: string) => void
|
|
30
21
|
/** Current control values, shared between the auto-rendered sidebar form and the default slot. */
|
|
31
22
|
values: Record<string, unknown>
|
|
@@ -41,8 +32,8 @@ export interface PluginWorkspaceControlsModel {
|
|
|
41
32
|
|
|
42
33
|
/**
|
|
43
34
|
* Resolved AppLayout + AppTopBar configuration consumed by WorkspaceShellInternal: top bar
|
|
44
|
-
*
|
|
45
|
-
*
|
|
35
|
+
* spec and active pill, plus the AppLayout layout props that own the responsive mobile
|
|
36
|
+
* sidebar toggle.
|
|
46
37
|
*/
|
|
47
38
|
export interface PluginWorkspaceShellModel {
|
|
48
39
|
/** AppLayout sidebar position. */
|
|
@@ -63,114 +54,32 @@ export interface PluginWorkspaceShellModel {
|
|
|
63
54
|
title: string
|
|
64
55
|
/** Secondary copy shown under the title. */
|
|
65
56
|
subtitle?: string
|
|
66
|
-
/**
|
|
67
|
-
|
|
68
|
-
/** Home link used by the top bar brand icon. */
|
|
69
|
-
homePath: string
|
|
70
|
-
/** Show the default MINT logo when no icon/logo slot is provided. */
|
|
71
|
-
showLogo: boolean
|
|
72
|
-
/** Preferred route-level page selector entries. */
|
|
73
|
-
pageSelector?: PageSelectorItemInput[]
|
|
74
|
-
/** Resolved active page selector id. */
|
|
75
|
-
currentPageSelectorId: string
|
|
76
|
-
/** Resolved centered pill navigation, generated from the control schema when omitted. */
|
|
77
|
-
pillNav?: PillNavItemInput[]
|
|
57
|
+
/** AppTopBar spec with the workspace defaults applied and the generated pills filled in; `false` removes the top bar. */
|
|
58
|
+
topBar: false | PluginWorkspaceTopBarSpec
|
|
78
59
|
/** Resolved active centered pill id. */
|
|
79
|
-
|
|
80
|
-
/** Show the theme toggle button. */
|
|
81
|
-
showThemeToggle: boolean
|
|
82
|
-
/** Show the settings button and modal. */
|
|
83
|
-
showSettings: boolean
|
|
84
|
-
/** Built-in settings modal configuration. */
|
|
85
|
-
settingsConfig?: TopBarSettingsConfig
|
|
86
|
-
/** Show the standalone badge when not integrated into the platform. */
|
|
87
|
-
showStandaloneLabel: boolean
|
|
88
|
-
/** Custom standalone badge label. */
|
|
89
|
-
standaloneLabel: string
|
|
90
|
-
/** Account dropdown entries. */
|
|
91
|
-
accountMenu?: AccountMenuItem[]
|
|
92
|
-
/** Show the notifications icon button. */
|
|
93
|
-
showNotifications: boolean
|
|
94
|
-
/** Draw a notification dot on the notifications icon. */
|
|
95
|
-
hasNotificationDot: boolean
|
|
96
|
-
/** Show the admin shortcut. */
|
|
97
|
-
showAdmin: boolean
|
|
98
|
-
/** Route used by the admin shortcut. */
|
|
99
|
-
adminPath: string
|
|
100
|
-
/** Account display name. */
|
|
101
|
-
userName?: string
|
|
102
|
-
/** Explicit account avatar initial. */
|
|
103
|
-
userInitial?: string
|
|
104
|
-
/** Account email shown in the avatar menu. */
|
|
105
|
-
userEmail?: string
|
|
60
|
+
pill: string
|
|
106
61
|
/** Names of AppTopBar passthrough slots the caller actually provided. */
|
|
107
62
|
topBarSlotNames: string[]
|
|
108
63
|
/** Scoped-slot payload exposed to the `topbar` override slot. */
|
|
109
64
|
controls: PluginWorkspaceControlsModel
|
|
110
65
|
}
|
|
111
66
|
|
|
112
|
-
/**
|
|
113
|
-
* Resolved AppSidebar configuration consumed by WorkspaceSidebarInternal: sidebar chrome,
|
|
114
|
-
* panels/forms, collapse behavior, and the compact control-schema props that drive
|
|
115
|
-
* AppSidebar's auto-generated form.
|
|
116
|
-
*/
|
|
67
|
+
/** Resolved AppSidebar configuration consumed by WorkspaceSidebarInternal. */
|
|
117
68
|
export interface PluginWorkspaceSidebarModel {
|
|
118
|
-
/**
|
|
119
|
-
|
|
120
|
-
/** Sidebar chrome subtitle. */
|
|
121
|
-
subtitle?: string
|
|
122
|
-
/** Optional compact badge/count rendered in the sidebar header. */
|
|
123
|
-
badge?: string | number
|
|
124
|
-
/** Map of view IDs to sidebar tool sections. */
|
|
125
|
-
panels: Record<string, SidebarToolSection[]>
|
|
69
|
+
/** AppSidebar spec with the workspace defaults applied. */
|
|
70
|
+
spec: PluginWorkspaceSidebarSpec
|
|
126
71
|
/** Resolved active view, used to pick which panels/forms render. */
|
|
127
72
|
activeView: string
|
|
128
|
-
/** AppSidebar floating style (always false: PluginWorkspaceView docks the sidebar inside AppLayout). */
|
|
129
|
-
floating: boolean
|
|
130
|
-
/** Compact AppSidebar density. */
|
|
131
|
-
dense: boolean
|
|
132
|
-
/** Sidebar CSS width. */
|
|
133
|
-
width?: string
|
|
134
|
-
/** Sidebar position, mirrors the shell's `sidebarPosition`. */
|
|
135
|
-
side: 'left' | 'right'
|
|
136
|
-
/** Optional FormBuilder schemas keyed by section ID. */
|
|
137
|
-
forms: Record<string, FormSchema>
|
|
138
|
-
/** DOM id for the AppSidebar scrollable content area. */
|
|
139
|
-
contentId?: string
|
|
140
|
-
/** Render the sidebar shell even when no panel matches the active view. */
|
|
141
|
-
showWhenEmpty: boolean
|
|
142
|
-
/** Optional compact control model for the generated sidebar form. */
|
|
143
|
-
model?: ControlModel | ControlModelBinding
|
|
144
|
-
/** Compact control schema for the generated sidebar form. */
|
|
145
|
-
controlSchema?: ControlSchema
|
|
146
|
-
/** Options passed to compact control schema generation. */
|
|
147
|
-
controlOptions: ControlWorkspaceOptions
|
|
148
73
|
/** Shared values for the auto-rendered sidebar form. */
|
|
149
74
|
values: Record<string, unknown>
|
|
150
|
-
/**
|
|
151
|
-
|
|
152
|
-
/** Show submit/cancel actions inside the auto-rendered sidebar form. */
|
|
153
|
-
showFormActions: boolean
|
|
75
|
+
/** Controlled sidebar collapsed state. */
|
|
76
|
+
collapsed?: boolean
|
|
154
77
|
/** Loading/saving state for the auto-rendered sidebar form. */
|
|
155
78
|
formLoading: boolean
|
|
156
79
|
/** Disabled state for the auto-rendered sidebar form. */
|
|
157
80
|
formDisabled: boolean
|
|
158
81
|
/** Readonly state for the auto-rendered sidebar form. */
|
|
159
82
|
formReadonly: boolean
|
|
160
|
-
/** Size passed to the auto-rendered sidebar form. */
|
|
161
|
-
formSize: 'sm' | 'md' | 'lg'
|
|
162
|
-
/** Show a built-in collapse/expand button in the sidebar chrome. */
|
|
163
|
-
collapsible?: boolean
|
|
164
|
-
/** Controlled sidebar collapsed state. */
|
|
165
|
-
collapsed?: boolean
|
|
166
|
-
/** Initial sidebar collapsed state when uncontrolled. */
|
|
167
|
-
defaultCollapsed: boolean
|
|
168
|
-
/** Sidebar width when collapsed. */
|
|
169
|
-
collapsedWidth: string
|
|
170
|
-
/** Accessible label for the sidebar collapse action. */
|
|
171
|
-
collapseButtonLabel: string
|
|
172
|
-
/** Accessible label for the sidebar expand action. */
|
|
173
|
-
expandButtonLabel: string
|
|
174
83
|
/** Names of AppSidebar passthrough slots the caller actually provided. */
|
|
175
84
|
slotNames: string[]
|
|
176
85
|
}
|
|
@@ -9,13 +9,11 @@ let interceptorAttached = false
|
|
|
9
9
|
interface MintAxiosRequestConfig extends AxiosRequestConfig {
|
|
10
10
|
_mintSkipAuth?: boolean
|
|
11
11
|
_mintAuthToken?: string
|
|
12
|
-
_mintTypedErrors?: boolean
|
|
13
12
|
}
|
|
14
13
|
|
|
15
14
|
interface MintInternalAxiosRequestConfig extends InternalAxiosRequestConfig {
|
|
16
15
|
_mintSkipAuth?: boolean
|
|
17
16
|
_mintAuthToken?: string
|
|
18
|
-
_mintTypedErrors?: boolean
|
|
19
17
|
}
|
|
20
18
|
|
|
21
19
|
type MutableHeaders = Record<string, unknown> & {
|
|
@@ -158,8 +156,6 @@ export interface ApiClientOptions {
|
|
|
158
156
|
baseUrl?: string
|
|
159
157
|
timeout?: number
|
|
160
158
|
withAuth?: boolean
|
|
161
|
-
/** Normalize failed responses into MintApiError. Generated clients enable this by default. */
|
|
162
|
-
typedErrors?: boolean
|
|
163
159
|
}
|
|
164
160
|
|
|
165
161
|
export interface UseApiReturn {
|
|
@@ -175,7 +171,7 @@ export interface UseApiReturn {
|
|
|
175
171
|
buildWsUrl: (path: string) => string
|
|
176
172
|
}
|
|
177
173
|
|
|
178
|
-
/** Axios-based API client that injects the plugin base URL and JWT auth header on every request. */
|
|
174
|
+
/** Axios-based API client that injects the plugin base URL and JWT auth header on every request. A failed response rejects with a `MintApiError`. */
|
|
179
175
|
export function useApi(options: ApiClientOptions = {}): UseApiReturn {
|
|
180
176
|
const settingsStore = useSettingsStore()
|
|
181
177
|
const authStore = useAuthStore()
|
|
@@ -209,33 +205,26 @@ export function useApi(options: ApiClientOptions = {}): UseApiReturn {
|
|
|
209
205
|
async (error: unknown) => {
|
|
210
206
|
if (axios.isAxiosError(error) && error.response) {
|
|
211
207
|
const request = error.config as MintInternalAxiosRequestConfig | undefined
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
// Keep non-JSON download errors available as the original body.
|
|
219
|
-
}
|
|
208
|
+
let payload: unknown = error.response.data
|
|
209
|
+
if (payload instanceof Blob) {
|
|
210
|
+
try {
|
|
211
|
+
payload = JSON.parse(await payload.text())
|
|
212
|
+
} catch {
|
|
213
|
+
// Keep non-JSON download errors available as the original body.
|
|
220
214
|
}
|
|
221
|
-
const typed = mintApiErrorFromResponse(
|
|
222
|
-
error.response.status,
|
|
223
|
-
payload,
|
|
224
|
-
{
|
|
225
|
-
requestId: String(error.response.headers?.['x-request-id'] ?? '') || null,
|
|
226
|
-
cause: error,
|
|
227
|
-
},
|
|
228
|
-
)
|
|
229
|
-
if (error.response.status === 401 && request._mintSkipAuth !== true) {
|
|
230
|
-
return Promise.reject(authenticationRequiredError(error, request._mintAuthToken, typed))
|
|
231
|
-
}
|
|
232
|
-
return Promise.reject(typed)
|
|
233
215
|
}
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
216
|
+
const typed = mintApiErrorFromResponse(
|
|
217
|
+
error.response.status,
|
|
218
|
+
payload,
|
|
219
|
+
{
|
|
220
|
+
requestId: String(error.response.headers?.['x-request-id'] ?? '') || null,
|
|
221
|
+
cause: error,
|
|
222
|
+
},
|
|
223
|
+
)
|
|
224
|
+
if (error.response.status === 401 && request?._mintSkipAuth !== true) {
|
|
225
|
+
return Promise.reject(authenticationRequiredError(error, request?._mintAuthToken, typed))
|
|
238
226
|
}
|
|
227
|
+
return Promise.reject(typed)
|
|
239
228
|
}
|
|
240
229
|
return Promise.reject(error)
|
|
241
230
|
},
|
|
@@ -256,7 +245,6 @@ export function useApi(options: ApiClientOptions = {}): UseApiReturn {
|
|
|
256
245
|
const base: MintAxiosRequestConfig = {
|
|
257
246
|
baseURL: getBaseUrl(),
|
|
258
247
|
timeout: options.timeout ?? settingsStore.requestTimeout,
|
|
259
|
-
_mintTypedErrors: options.typedErrors,
|
|
260
248
|
...config,
|
|
261
249
|
}
|
|
262
250
|
// Strip auth header if explicitly disabled
|
|
@@ -42,7 +42,7 @@ export interface AppExperimentPopoverBinding {
|
|
|
42
42
|
}
|
|
43
43
|
|
|
44
44
|
export interface AppExperimentSelectorModalBinding {
|
|
45
|
-
|
|
45
|
+
open: boolean
|
|
46
46
|
currentExperimentId: number | null
|
|
47
47
|
}
|
|
48
48
|
|
|
@@ -139,15 +139,16 @@ export function useAppExperiment(options: UseAppExperimentOptions = {}): UseAppE
|
|
|
139
139
|
saveSuccessMessage: saveSuccessMessage.value,
|
|
140
140
|
}))
|
|
141
141
|
const selectorModal = computed<AppExperimentSelectorModalBinding>(() => ({
|
|
142
|
-
|
|
142
|
+
open: showModal.value,
|
|
143
143
|
currentExperimentId: experimentId.value,
|
|
144
144
|
}))
|
|
145
145
|
|
|
146
146
|
if (options.onSelect) {
|
|
147
|
+
// Keyed by id, so a refresh of the same experiment is not a new selection.
|
|
147
148
|
watch(
|
|
148
|
-
() => store.current,
|
|
149
|
-
(
|
|
150
|
-
if (
|
|
149
|
+
() => store.current?.id,
|
|
150
|
+
(id) => {
|
|
151
|
+
if (id !== undefined && store.current) void options.onSelect?.(store.current)
|
|
151
152
|
},
|
|
152
153
|
)
|
|
153
154
|
}
|
|
@@ -8,11 +8,9 @@ import {
|
|
|
8
8
|
type Ref,
|
|
9
9
|
} from 'vue'
|
|
10
10
|
import { useApi } from './useApi'
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
13
|
-
|
|
14
|
-
resolveCurrentExperimentId,
|
|
15
|
-
} from './platformContextHelpers'
|
|
11
|
+
import { useRequest } from './useRequest'
|
|
12
|
+
import { getInjectedPlatformContext } from './platformContextHelpers'
|
|
13
|
+
import { useExperimentStore } from '../stores/experiment'
|
|
16
14
|
import type {
|
|
17
15
|
AnalysisArtifactDetail,
|
|
18
16
|
AnalysisArtifactListResponse,
|
|
@@ -24,8 +22,8 @@ import type {
|
|
|
24
22
|
|
|
25
23
|
export { ANALYSIS_FILE_ARTIFACT_SCHEMA } from '../types/analysisArtifactTypes'
|
|
26
24
|
|
|
27
|
-
export interface
|
|
28
|
-
/** Experiment id; defaults to
|
|
25
|
+
export interface UseArtifactsOptions {
|
|
26
|
+
/** Experiment id; defaults to the current experiment (`useExperimentStore`). Refetches when it changes. */
|
|
29
27
|
experimentId?: MaybeRefOrGetter<number | undefined>
|
|
30
28
|
/** Override API base URL. */
|
|
31
29
|
apiBaseUrl?: string
|
|
@@ -37,14 +35,14 @@ export interface UseAnalysisArtifactsOptions {
|
|
|
37
35
|
immediate?: boolean
|
|
38
36
|
}
|
|
39
37
|
|
|
40
|
-
export interface
|
|
38
|
+
export interface UseArtifactsReturn {
|
|
41
39
|
/** Fetched artifacts, scoped to pluginId when set. */
|
|
42
40
|
artifacts: ComputedRef<AnalysisArtifactSummary[]>
|
|
43
41
|
/** Artifacts after applying statusFilter, pluginFilter, and search. */
|
|
44
42
|
visibleArtifacts: ComputedRef<AnalysisArtifactSummary[]>
|
|
45
43
|
/** Detail loaded by the last successful getDetail call, or null. */
|
|
46
44
|
selectedDetail: Ref<AnalysisArtifactDetail | null>
|
|
47
|
-
/** Resolved experiment id from options
|
|
45
|
+
/** Resolved experiment id from options or the current experiment. */
|
|
48
46
|
currentExperimentId: ComputedRef<number | undefined>
|
|
49
47
|
/** Whether an experiment id is available. */
|
|
50
48
|
hasCurrentExperiment: ComputedRef<boolean>
|
|
@@ -90,23 +88,25 @@ export interface UseAnalysisArtifactsReturn {
|
|
|
90
88
|
*
|
|
91
89
|
* @example Recommended
|
|
92
90
|
* ```ts
|
|
93
|
-
* const artifacts =
|
|
91
|
+
* const artifacts = useArtifacts({ pluginId: 'LEAF' })
|
|
94
92
|
* await artifacts.list()
|
|
95
93
|
* ```
|
|
96
94
|
*/
|
|
97
|
-
export function
|
|
98
|
-
options:
|
|
99
|
-
):
|
|
95
|
+
export function useArtifacts(
|
|
96
|
+
options: UseArtifactsOptions = {},
|
|
97
|
+
): UseArtifactsReturn {
|
|
100
98
|
const injectedContext = getInjectedPlatformContext()
|
|
101
99
|
const api = useApi({ baseUrl: options.apiBaseUrl ?? injectedContext?.platformApiUrl })
|
|
100
|
+
const experimentStore = useExperimentStore()
|
|
102
101
|
|
|
103
102
|
const currentExperimentId = computed<number | undefined>(
|
|
104
|
-
() => toValue(options.experimentId) ??
|
|
103
|
+
() => toValue(options.experimentId) ?? experimentStore.currentId ?? undefined,
|
|
105
104
|
)
|
|
106
105
|
const hasCurrentExperiment = computed(() => currentExperimentId.value !== undefined)
|
|
107
106
|
const scopePluginId = computed(() => toValue(options.pluginId) ?? null)
|
|
108
107
|
|
|
109
|
-
const request =
|
|
108
|
+
const request = useRequest('Analysis artifact request failed.')
|
|
109
|
+
const lastLoadedAt = ref<Date | null>(null)
|
|
110
110
|
const fetchedArtifacts = ref<AnalysisArtifactSummary[]>([])
|
|
111
111
|
const selectedDetail = ref<AnalysisArtifactDetail | null>(null)
|
|
112
112
|
|
|
@@ -182,7 +182,7 @@ export function useAnalysisArtifacts(
|
|
|
182
182
|
if (token !== listToken) return artifacts.value
|
|
183
183
|
// Copy: replaceArtifact splices in place, and the response array is not ours.
|
|
184
184
|
fetchedArtifacts.value = [...(data?.artifacts ?? [])]
|
|
185
|
-
|
|
185
|
+
lastLoadedAt.value = new Date()
|
|
186
186
|
return artifacts.value
|
|
187
187
|
} catch (err) {
|
|
188
188
|
if (token !== listToken) return []
|
|
@@ -206,7 +206,7 @@ export function useAnalysisArtifacts(
|
|
|
206
206
|
)
|
|
207
207
|
if (token !== detailToken) return null
|
|
208
208
|
selectedDetail.value = detail
|
|
209
|
-
|
|
209
|
+
lastLoadedAt.value = new Date()
|
|
210
210
|
return detail
|
|
211
211
|
} catch (err) {
|
|
212
212
|
if (token !== detailToken) return null
|
|
@@ -272,7 +272,6 @@ export function useAnalysisArtifacts(
|
|
|
272
272
|
try {
|
|
273
273
|
const summary = await operation(experimentId)
|
|
274
274
|
replaceArtifact(summary)
|
|
275
|
-
request.markSaved()
|
|
276
275
|
return summary
|
|
277
276
|
} catch (err) {
|
|
278
277
|
request.setError(err)
|
|
@@ -344,7 +343,7 @@ export function useAnalysisArtifacts(
|
|
|
344
343
|
isLoading,
|
|
345
344
|
isMutating,
|
|
346
345
|
error: request.error,
|
|
347
|
-
lastLoadedAt
|
|
346
|
+
lastLoadedAt,
|
|
348
347
|
search,
|
|
349
348
|
statusFilter,
|
|
350
349
|
pluginFilter,
|
|
@@ -106,16 +106,15 @@ export function useControlSchema<TControls extends ControlSchema>(
|
|
|
106
106
|
fields: normalizeControls(controls, options).map(controlToFormField),
|
|
107
107
|
formSchema,
|
|
108
108
|
form: {
|
|
109
|
-
|
|
109
|
+
spec: { controls, controlOptions: options },
|
|
110
110
|
},
|
|
111
111
|
settingsSchema,
|
|
112
112
|
settings: {
|
|
113
|
-
|
|
113
|
+
spec: settingsSchema,
|
|
114
114
|
},
|
|
115
115
|
topBarSettingsConfig,
|
|
116
116
|
topBarSettings: {
|
|
117
|
-
|
|
118
|
-
settingsConfig: topBarSettingsConfig,
|
|
117
|
+
spec: { settings: topBarSettingsConfig },
|
|
119
118
|
},
|
|
120
119
|
sidebarPanels,
|
|
121
120
|
viewIds,
|
|
@@ -123,11 +122,8 @@ export function useControlSchema<TControls extends ControlSchema>(
|
|
|
123
122
|
defaultView,
|
|
124
123
|
sectionSchemas,
|
|
125
124
|
sidebar: {
|
|
126
|
-
panels: sidebarPanels,
|
|
127
|
-
|
|
128
|
-
viewIds,
|
|
129
|
-
viewItems,
|
|
130
|
-
defaultView,
|
|
125
|
+
spec: { panels: sidebarPanels, forms: sectionSchemas },
|
|
126
|
+
activeView: defaultView,
|
|
131
127
|
},
|
|
132
128
|
initialValues: getControlDefaults(controls),
|
|
133
129
|
sectionSchema: (sectionId: string) => controlsToSectionFormSchema(controls, sectionId, options),
|
|
@@ -145,8 +145,6 @@ export function useControlWorkspace<TControls extends ControlSchema>(
|
|
|
145
145
|
const sidebar = reactive({
|
|
146
146
|
...schema.sidebar,
|
|
147
147
|
activeView: activeView.value,
|
|
148
|
-
modelValue: values,
|
|
149
|
-
'onUpdate:modelValue': setValues,
|
|
150
148
|
values,
|
|
151
149
|
'onUpdate:values': setValues,
|
|
152
150
|
}) as ControlWorkspaceSidebarBinding
|
|
@@ -156,15 +154,14 @@ export function useControlWorkspace<TControls extends ControlSchema>(
|
|
|
156
154
|
onSelect: (item: PillNavItem) => setActiveView(item.id),
|
|
157
155
|
}) as ControlWorkspacePillNavBinding
|
|
158
156
|
const topBarSettingsBinding = {
|
|
159
|
-
|
|
160
|
-
settingsConfig: topBarSettingsConfig,
|
|
157
|
+
spec: { settings: topBarSettingsConfig },
|
|
161
158
|
onSettingsValuesChange: setValues,
|
|
162
159
|
} as ControlWorkspaceTopBarSettingsBinding
|
|
163
160
|
const topBarProps = computed<ControlWorkspaceTopBarBinding>(() => ({
|
|
164
|
-
|
|
165
|
-
|
|
161
|
+
spec: { pills: pillNav.items, settings: topBarSettingsConfig },
|
|
162
|
+
pill: pillNav.currentItemId,
|
|
166
163
|
onPillSelect: pillNav.onSelect,
|
|
167
|
-
|
|
164
|
+
onSettingsValuesChange: setValues,
|
|
168
165
|
}))
|
|
169
166
|
const bindings: ControlWorkspaceComponentBindings = {
|
|
170
167
|
form,
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { computed, type ComputedRef } from 'vue'
|
|
2
|
+
import { useExperimentStore } from '../stores/experiment'
|
|
3
|
+
import type { ExperimentSummary } from '../types'
|
|
4
|
+
|
|
5
|
+
/** Load state of the current experiment record. */
|
|
6
|
+
export type ExperimentLoadStatus = 'idle' | 'loading' | 'ready' | 'error'
|
|
7
|
+
|
|
8
|
+
export interface UseExperimentReturn {
|
|
9
|
+
/** Id of the current experiment; `null` when none is selected. */
|
|
10
|
+
id: ComputedRef<number | null>
|
|
11
|
+
/** Record of the current experiment, once the platform returned it. */
|
|
12
|
+
current: ComputedRef<ExperimentSummary | null>
|
|
13
|
+
/** `idle` with no selection, then `loading`, `ready` or `error`. */
|
|
14
|
+
status: ComputedRef<ExperimentLoadStatus>
|
|
15
|
+
/** Message of the last failed load, or `null`. */
|
|
16
|
+
error: ComputedRef<string | null>
|
|
17
|
+
/** Read the current experiment again. The selection does not change. */
|
|
18
|
+
refresh: () => Promise<void>
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Read the experiment the plugin page works on.
|
|
23
|
+
*
|
|
24
|
+
* The platform selects the experiment and keeps it in step with the URL; this
|
|
25
|
+
* composable only reads it. Watch `id` to respond to a change. In standalone
|
|
26
|
+
* mode no experiment is selected and `id` stays `null`.
|
|
27
|
+
*
|
|
28
|
+
* @example
|
|
29
|
+
* ```typescript
|
|
30
|
+
* const experiment = useExperiment()
|
|
31
|
+
* watch(experiment.id, (id) => { if (id !== null) void load(id) }, { immediate: true })
|
|
32
|
+
* ```
|
|
33
|
+
*/
|
|
34
|
+
export function useExperiment(): UseExperimentReturn {
|
|
35
|
+
const store = useExperimentStore()
|
|
36
|
+
const id = computed(() => store.currentId)
|
|
37
|
+
|
|
38
|
+
return {
|
|
39
|
+
id,
|
|
40
|
+
current: computed(() => store.current),
|
|
41
|
+
status: computed(() => {
|
|
42
|
+
if (store.currentId === null) return 'idle'
|
|
43
|
+
if (store.isResolving) return 'loading'
|
|
44
|
+
return store.error ? 'error' : 'ready'
|
|
45
|
+
}),
|
|
46
|
+
error: computed(() => store.error),
|
|
47
|
+
refresh: store.refresh,
|
|
48
|
+
}
|
|
49
|
+
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { shallowRef, computed, type Ref, type ComputedRef } from 'vue'
|
|
2
2
|
import { useApi, type UseApiReturn } from './useApi'
|
|
3
|
-
import {
|
|
3
|
+
import { useRequest } from './useRequest'
|
|
4
4
|
import {
|
|
5
5
|
extractSampleNamesFromDesignData,
|
|
6
6
|
extractSampleOptionsFromDesignData,
|
|
@@ -47,8 +47,8 @@ export function useExperimentData(
|
|
|
47
47
|
options: UseExperimentDataOptions = {},
|
|
48
48
|
): UseExperimentDataReturn {
|
|
49
49
|
const data = shallowRef<Record<string, unknown> | null>(null)
|
|
50
|
-
const request =
|
|
51
|
-
const isLoading = request.
|
|
50
|
+
const request = useRequest('Failed to fetch experiment data')
|
|
51
|
+
const isLoading = request.isLoading
|
|
52
52
|
const error = request.error
|
|
53
53
|
const lastLoadedAt = request.lastLoadedAt
|
|
54
54
|
let lastExperimentId: number | null = null
|
|
@@ -97,7 +97,7 @@ export function useExperimentData(
|
|
|
97
97
|
try {
|
|
98
98
|
data.value = await request.run(
|
|
99
99
|
() => getApi().get<Record<string, unknown>>(`/experiments/${experimentId}/data`),
|
|
100
|
-
{
|
|
100
|
+
{ kind: 'load', errorMessage: 'Failed to fetch experiment data' },
|
|
101
101
|
)
|
|
102
102
|
return data.value
|
|
103
103
|
} catch {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { ref, reactive, computed, watch, type Ref, type ComputedRef } from 'vue'
|
|
2
2
|
import { useApi } from './useApi'
|
|
3
3
|
import { useDebouncedWatch } from './useDebouncedWatch'
|
|
4
|
-
import {
|
|
4
|
+
import { useRequest } from './useRequest'
|
|
5
5
|
import { datePresetToISO } from './experiment-utils'
|
|
6
6
|
import type {
|
|
7
7
|
ExperimentSummary,
|
|
@@ -92,10 +92,10 @@ export function useExperimentSelector(
|
|
|
92
92
|
const experiments = ref<ExperimentSummary[]>([])
|
|
93
93
|
const total = ref(0)
|
|
94
94
|
const selectedExperiment = ref<ExperimentSummary | null>(null)
|
|
95
|
-
const request =
|
|
96
|
-
const isLoading = request.
|
|
95
|
+
const request = useRequest('Failed to fetch experiments')
|
|
96
|
+
const isLoading = request.isLoading
|
|
97
97
|
const error = request.error
|
|
98
|
-
const lastLoadedAt =
|
|
98
|
+
const lastLoadedAt = ref<Date | null>(null)
|
|
99
99
|
const page = ref(0)
|
|
100
100
|
let fetchGeneration = 0
|
|
101
101
|
|
|
@@ -245,7 +245,7 @@ export function useExperimentSelector(
|
|
|
245
245
|
experiments.value = [...experiments.value, ...data.experiments]
|
|
246
246
|
}
|
|
247
247
|
total.value = data.total
|
|
248
|
-
|
|
248
|
+
lastLoadedAt.value = new Date()
|
|
249
249
|
} catch (err) {
|
|
250
250
|
if (generation !== fetchGeneration) return
|
|
251
251
|
request.setError(err, 'Failed to fetch experiments')
|