@morscherlab/mint-sdk 1.2.0-beta.1 → 1.2.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 +35 -5
- package/dist/{ExperimentPopover-tLwJ7XF4.js → ExperimentPopover-oL0fg_A0.js} +6 -4
- package/dist/ExperimentPopover-oL0fg_A0.js.map +1 -0
- package/dist/{ExperimentSelectorModal-DyPAUCLw.js → ExperimentSelectorModal-BeEOomw_.js} +5 -5
- package/dist/ExperimentSelectorModal-BeEOomw_.js.map +1 -0
- package/dist/{SettingsModal-BgKY93zh.js → SettingsModal-Dphh3RrI.js} +5 -8
- package/dist/SettingsModal-Dphh3RrI.js.map +1 -0
- package/dist/{EmptyState-p90quq8Z.js → Skeleton-DxtwJ5gt.js} +111 -93
- package/dist/Skeleton-DxtwJ5gt.js.map +1 -0
- package/dist/__tests__/components/ExperimentTimeline.test.d.ts +1 -0
- package/dist/__tests__/components/PluginWorkspaceView.internal.test.d.ts +1 -0
- package/dist/__tests__/components/SecretInput.test.d.ts +1 -0
- package/dist/__tests__/components/WellEditPopupInternal.test.d.ts +1 -0
- package/dist/__tests__/composables/useListReorder.test.d.ts +1 -0
- package/dist/__tests__/composables/usePluginConfig.test.d.ts +15 -0
- package/dist/__tests__/styles/cssTokens.test.d.ts +1 -0
- package/dist/components/ActionMenu.vue.d.ts +1 -1
- package/dist/components/AppAvatarMenu.vue.d.ts +4 -0
- package/dist/components/AppPluginSwitcher.vue.d.ts +2 -0
- package/dist/components/AppSidebar.vue.d.ts +1 -1
- package/dist/components/AuditTrail.vue.d.ts +13 -0
- package/dist/components/AutoGroupModal.vue.d.ts +1 -1
- package/dist/components/BatchProgressList.vue.d.ts +17 -0
- package/dist/components/BioTemplateExperimentWorkspaceView.vue.d.ts +2 -2
- package/dist/components/DataFrame.vue.d.ts +14 -2
- package/dist/components/DatePicker.vue.d.ts +1 -1
- package/dist/components/DateTimePicker.vue.d.ts +2 -0
- package/dist/components/DropdownButton.vue.d.ts +2 -0
- package/dist/components/ExperimentDataViewer.vue.d.ts +26 -1
- package/dist/components/ExperimentPopover.vue.d.ts +1 -0
- package/dist/components/ExperimentTimeline.vue.d.ts +29 -1
- package/dist/components/FitPanel.vue.d.ts +1 -1
- package/dist/components/JobsStatusTray.vue.d.ts +9 -2
- package/dist/components/LcmsSequenceTable.vue.d.ts +29 -1
- package/dist/components/PluginWorkspaceView.props.d.ts +29 -1
- package/dist/components/PluginWorkspaceView.vue.d.ts +5 -5
- package/dist/components/ProgressBar.vue.d.ts +1 -1
- package/dist/components/ProtocolStepEditor.vue.d.ts +1 -0
- package/dist/components/ReagentList.vue.d.ts +29 -1
- package/dist/components/SampleHierarchyTree.vue.d.ts +29 -1
- package/dist/components/SampleLegend.vue.d.ts +1 -1
- package/dist/components/SampleSelector.drag.d.ts +13 -0
- package/dist/components/SampleSelector.tree.d.ts +2 -0
- package/dist/components/SampleSelector.vue.d.ts +35 -2
- package/dist/components/ScheduleCalendar.vue.d.ts +20 -0
- package/dist/components/SecretInput.vue.d.ts +28 -0
- package/dist/components/SettingsModal.vue.d.ts +1 -1
- package/dist/components/SmartGroupFieldRecipe.vue.d.ts +2 -1
- package/dist/components/TimePicker.vue.d.ts +1 -0
- package/dist/components/WellPlate.geometry.d.ts +15 -0
- package/dist/components/WellPlate.interaction.d.ts +13 -0
- package/dist/components/WellPlate.vue.d.ts +29 -0
- package/dist/components/index.d.ts +9 -0
- package/dist/components/index.js +8 -8
- package/dist/components/internal/AppTopBarPageSelectorInternal.vue.d.ts +2 -0
- package/dist/components/internal/DataStateInternal.vue.d.ts +43 -0
- package/dist/components/internal/WellEditPopupInternal.vue.d.ts +3 -1
- package/dist/components/internal/WorkspaceControlsInternal.vue.d.ts +23 -0
- package/dist/components/internal/WorkspaceShellInternal.vue.d.ts +70 -0
- package/dist/components/internal/WorkspaceSidebarInternal.vue.d.ts +43 -0
- package/dist/{components-DkHddRMl.js → components-CgAUzF8F.js} +2497 -2235
- package/dist/components-CgAUzF8F.js.map +1 -0
- package/dist/composables/controlSchemaTypes.d.ts +34 -0
- package/dist/composables/flattenWorkspaceBindings.d.ts +61 -0
- package/dist/composables/index.d.ts +9 -2
- package/dist/composables/index.js +10 -10
- package/dist/composables/pluginWorkspaceModel.d.ts +164 -0
- package/dist/composables/useAsync.d.ts +5 -1
- package/dist/composables/useBioTemplateWorkspace.d.ts +4 -20
- package/dist/composables/useCommandHistory.d.ts +5 -1
- package/dist/composables/useDropdownState.d.ts +18 -2
- package/dist/composables/useEventStream.d.ts +9 -0
- package/dist/composables/useFocusTrap.d.ts +21 -0
- package/dist/composables/useGeneratedAnalysis.d.ts +3 -1
- package/dist/composables/useJobsStatusTray.d.ts +25 -1
- package/dist/composables/useListReorder.d.ts +90 -0
- package/dist/composables/useMenuKeyboard.d.ts +29 -0
- package/dist/composables/useOptimisticMutation.d.ts +5 -1
- package/dist/composables/usePluginClient.d.ts +2 -0
- package/dist/composables/usePluginConfig.d.ts +27 -0
- package/dist/composables/usePluginWorkspace.d.ts +51 -0
- package/dist/composables/useRequestSyncState.d.ts +42 -2
- package/dist/composables/useResourceCrud.d.ts +5 -1
- package/dist/composables/useRovingFocus.d.ts +24 -0
- package/dist/composables/useScheduleDrag.d.ts +1 -0
- package/dist/composables/useWellPainting.d.ts +5 -1
- package/dist/composables/useWellPlateAdapter.d.ts +5 -1
- package/dist/composables/useWellPlateValidation.d.ts +5 -1
- package/dist/composables/workspaceRecipes.d.ts +188 -0
- package/dist/{composables-C_i90sGS.js → composables-B_pia3hO.js} +209 -82
- package/dist/composables-B_pia3hO.js.map +1 -0
- package/dist/{useApi-J6zFkHmn.js → errors-_W0-LbA6.js} +103 -3
- package/dist/errors-_W0-LbA6.js.map +1 -0
- package/dist/{experiment-Cq145oEW.js → experiment-Cwl9AYxw.js} +3 -8
- package/dist/experiment-Cwl9AYxw.js.map +1 -0
- package/dist/{experiment-utils-CLnzPPq5.js → experiment-utils-DV3DrvE_.js} +70 -51
- package/dist/experiment-utils-DV3DrvE_.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +15 -15
- package/dist/install.js +2 -7
- package/dist/install.js.map +1 -1
- package/dist/permissions.d.ts +42 -1
- package/dist/permissions.js +20 -10
- package/dist/permissions.js.map +1 -1
- package/dist/stores/auth.d.ts +6 -0
- package/dist/stores/index.d.ts +1 -1
- package/dist/stores/index.js +3 -3
- package/dist/stores/settings.d.ts +31 -1
- package/dist/styles.css +11247 -29501
- package/dist/templates/builderReadUtils.d.ts +1 -1
- package/dist/templates/index.js +2 -4
- package/dist/{templates-DsP51i-S.js → templates-Qq113pyZ.js} +303 -106
- package/dist/templates-Qq113pyZ.js.map +1 -0
- package/dist/types/auth.d.ts +1 -0
- package/dist/types/form-builder.d.ts +1 -1
- package/dist/{useControlSchema-BDx2Olha.js → useControlSchema-aMZlb4Sc.js} +462 -1130
- package/dist/useControlSchema-aMZlb4Sc.js.map +1 -0
- package/dist/{useDropdownState-DSb3BC3N.js → useDropdownState-DitCtrTT.js} +22 -6
- package/dist/useDropdownState-DitCtrTT.js.map +1 -0
- package/dist/{useExperimentSelector-CV4iNfMS.js → useExperimentSelector-I8HC8hUu.js} +4 -4
- package/dist/{useExperimentSelector-CV4iNfMS.js.map → useExperimentSelector-I8HC8hUu.js.map} +1 -1
- package/dist/{useFormBuilder-BLxG3BOX.js → useFormBuilder-TCxNnqeb.js} +2 -2
- package/dist/{useFormBuilder-BLxG3BOX.js.map → useFormBuilder-TCxNnqeb.js.map} +1 -1
- package/dist/{useProtocolTemplates-CS_SQl6U.js → useProtocolTemplates-BmX_iVBR.js} +766 -212
- package/dist/useProtocolTemplates-BmX_iVBR.js.map +1 -0
- package/dist/utils/color.d.ts +13 -0
- package/dist/utils/errors.d.ts +9 -0
- package/dist/utils/pluginSecrets.d.ts +53 -0
- package/dist/utils/records.d.ts +4 -0
- package/package.json +1 -1
- package/src/__tests__/components/ActionMenu.test.ts +94 -0
- package/src/__tests__/components/AppAvatarMenu.test.ts +123 -0
- package/src/__tests__/components/BaseTabs.test.ts +67 -0
- package/src/__tests__/components/DataFrame.test.ts +183 -11
- package/src/__tests__/components/DataStates.test.ts +176 -0
- package/src/__tests__/components/DatePicker.test.ts +76 -0
- package/src/__tests__/components/DateTimePicker.test.ts +36 -0
- package/src/__tests__/components/DropdownButton.test.ts +134 -0
- package/src/__tests__/components/ExperimentTimeline.test.ts +63 -0
- package/src/__tests__/components/GroupAssigner.test.ts +53 -0
- package/src/__tests__/components/LcmsSequenceTable.test.ts +22 -0
- package/src/__tests__/components/PluginWorkspaceView.internal.test.ts +230 -0
- package/src/__tests__/components/RackEditor.test.ts +35 -0
- package/src/__tests__/components/ReagentList.test.ts +64 -2
- package/src/__tests__/components/RetiredStyles.test.ts +31 -0
- package/src/__tests__/components/SampleSelector.drag.test.ts +51 -1
- package/src/__tests__/components/ScheduleCalendar.test.ts +63 -0
- package/src/__tests__/components/SecretInput.test.ts +87 -0
- package/src/__tests__/components/SegmentedControl.test.ts +88 -0
- package/src/__tests__/components/TimePicker.test.ts +61 -0
- package/src/__tests__/components/WellEditPopupInternal.test.ts +108 -0
- package/src/__tests__/components/WellPlate.interaction.test.ts +59 -0
- package/src/__tests__/composables/useAuth.test.ts +2 -0
- package/src/__tests__/composables/useDropdownState.test.ts +58 -1
- package/src/__tests__/composables/useListReorder.test.ts +145 -0
- package/src/__tests__/composables/usePluginClient.test.ts +140 -0
- package/src/__tests__/composables/usePluginConfig.test.ts +497 -0
- package/src/__tests__/composables/useRequestSyncState.test.ts +140 -0
- package/src/__tests__/docs/frontendDocsCatalog.test.ts +39 -7
- package/src/__tests__/stores/settings.test.ts +71 -1
- package/src/__tests__/styles/cssTokens.test.ts +131 -0
- package/src/__tests__/utils/permissions.test.ts +68 -0
- package/src/components/ActionMenu.vue +45 -88
- package/src/components/AlertBox.vue +0 -4
- package/src/components/AppAvatarMenu.vue +26 -7
- package/src/components/AppLayout.vue +0 -4
- package/src/components/AppPluginSwitcher.story.vue +87 -0
- package/src/components/AppPluginSwitcher.vue +2 -5
- package/src/components/AppSidebar.vue +0 -4
- package/src/components/AppToastContainer.vue +6 -8
- package/src/components/AppTopBar.vue +0 -4
- package/src/components/ArtifactSaveDialog.vue +0 -4
- package/src/components/ArtifactSelectorModal.vue +0 -4
- package/src/components/AuditTrail.story.vue +18 -0
- package/src/components/AuditTrail.vue +27 -7
- package/src/components/AutoGroupModal.vue +0 -4
- package/src/components/Avatar.vue +0 -4
- package/src/components/BaseButton.vue +0 -4
- package/src/components/BaseCheckbox.vue +0 -4
- package/src/components/BaseInput.vue +0 -4
- package/src/components/BaseModal.vue +8 -60
- package/src/components/BasePill.vue +0 -4
- package/src/components/BaseRadioGroup.vue +0 -4
- package/src/components/BaseSelect.vue +0 -4
- package/src/components/BaseSlider.vue +0 -4
- package/src/components/BaseTabs.vue +26 -5
- package/src/components/BaseTextarea.vue +0 -4
- package/src/components/BaseToggle.vue +0 -4
- package/src/components/BatchProgressList.story.vue +18 -0
- package/src/components/BatchProgressList.vue +32 -4
- package/src/components/BioTemplateExperimentWorkspaceView.vue +10 -21
- package/src/components/BioTemplatePackWorkspaceView.vue +11 -15
- package/src/components/BioTemplatePresetWorkspaceView.vue +8 -13
- package/src/components/Breadcrumb.vue +0 -4
- package/src/components/Calendar.vue +0 -4
- package/src/components/ChartContainer.story.vue +1 -1
- package/src/components/ChartContainer.vue +0 -4
- package/src/components/ChemicalFormula.vue +0 -4
- package/src/components/CollapsibleCard.vue +0 -4
- package/src/components/ColorSlider.vue +0 -4
- package/src/components/ComponentBindingRenderer.vue +1 -3
- package/src/components/ConcentrationInput.vue +0 -4
- package/src/components/ConfirmDialog.vue +0 -4
- package/src/components/ControlWorkspaceView.vue +11 -22
- package/src/components/DataFrame.story.vue +14 -0
- package/src/components/DataFrame.vue +97 -23
- package/src/components/DatePicker.vue +73 -27
- package/src/components/DateTimePicker.vue +45 -17
- package/src/components/Divider.vue +0 -4
- package/src/components/DoseCalculator.vue +0 -4
- package/src/components/DoseDesignWorkspaceView.vue +6 -25
- package/src/components/DropdownButton.vue +24 -6
- package/src/components/EmptyState.vue +0 -4
- package/src/components/ExperimentCodeBadge.vue +0 -4
- package/src/components/ExperimentDataViewer.story.vue +3 -0
- package/src/components/ExperimentDataViewer.vue +33 -13
- package/src/components/ExperimentPopover.vue +2 -5
- package/src/components/ExperimentSelectorModal.vue +0 -4
- package/src/components/ExperimentTimeline.story.vue +18 -0
- package/src/components/ExperimentTimeline.vue +81 -75
- package/src/components/FileUploader.vue +0 -4
- package/src/components/FitPanel.vue +0 -4
- package/src/components/FormActions.story.vue +96 -0
- package/src/components/FormActions.vue +0 -4
- package/src/components/FormBuilder.vue +0 -4
- package/src/components/FormField.vue +0 -4
- package/src/components/FormulaInput.vue +0 -4
- package/src/components/GeneratedPathInput.story.vue +68 -0
- package/src/components/GeneratedPlotlyResult.story.vue +96 -0
- package/src/components/GeneratedPlotlyResult.vue +3 -3
- package/src/components/GeneratedPluginView.story.vue +145 -0
- package/src/components/GeneratedPluginView.vue +10 -10
- package/src/components/GeneratedResultRenderer.story.vue +117 -0
- package/src/components/GeneratedResultRenderer.vue +4 -4
- package/src/components/GroupAssigner.vue +67 -5
- package/src/components/IconButton.vue +0 -4
- package/src/components/InstrumentAlertLog.vue +0 -4
- package/src/components/InstrumentStateBadge.vue +0 -4
- package/src/components/InstrumentStatusCard.vue +0 -4
- package/src/components/JobsStatusTray.vue +16 -5
- package/src/components/LcmsSequenceTable.vue +81 -50
- package/src/components/LoadingSpinner.vue +0 -4
- package/src/components/MobileSupportGate.vue +0 -4
- package/src/components/MoleculeInput.vue +0 -4
- package/src/components/MultiSelect.vue +0 -4
- package/src/components/NumberInput.vue +0 -4
- package/src/components/PlateMapEditor.vue +3 -14
- package/src/components/PluginIcon.vue +0 -4
- package/src/components/PluginWorkspaceView.props.ts +38 -0
- package/src/components/PluginWorkspaceView.vue +53 -224
- package/src/components/ProgressBar.vue +0 -4
- package/src/components/ProtocolStepEditor.vue +2 -4
- package/src/components/RackEditor.vue +51 -70
- package/src/components/ReagentEditor.vue +0 -4
- package/src/components/ReagentList.story.vue +18 -0
- package/src/components/ReagentList.vue +127 -82
- package/src/components/ResourceCard.vue +0 -4
- package/src/components/RuntimeUpdateNotice.story.vue +49 -0
- package/src/components/RuntimeUpdateNotice.vue +4 -4
- package/src/components/SampleHierarchyTree.story.vue +18 -0
- package/src/components/SampleHierarchyTree.vue +32 -9
- package/src/components/SampleLegend.vue +2 -8
- package/src/components/SampleSelector.drag.ts +51 -0
- package/src/components/SampleSelector.story.vue +6 -0
- package/src/components/SampleSelector.tree.ts +2 -0
- package/src/components/SampleSelector.vue +49 -10
- package/src/components/SampleSelectorGroupNode.vue +19 -0
- package/src/components/ScheduleCalendar.story.vue +6 -0
- package/src/components/ScheduleCalendar.vue +82 -7
- package/src/components/ScientificNumber.vue +0 -4
- package/src/components/SecretInput.story.vue +79 -0
- package/src/components/SecretInput.vue +150 -0
- package/src/components/SectionCard.vue +0 -4
- package/src/components/SegmentedControl.vue +48 -5
- package/src/components/SequenceInput.vue +0 -4
- package/src/components/SequenceProgressBar.story.vue +110 -0
- package/src/components/SequenceProgressBar.vue +0 -4
- package/src/components/SettingsModal.vue +0 -4
- package/src/components/Skeleton.vue +0 -4
- package/src/components/SmartGroupFieldRecipe.vue +8 -6
- package/src/components/SmartGroupManual.vue +0 -4
- package/src/components/StatusIndicator.vue +0 -4
- package/src/components/StepWizard.vue +0 -4
- package/src/components/TagsInput.vue +4 -6
- package/src/components/ThemeToggle.vue +0 -4
- package/src/components/TimePicker.vue +36 -7
- package/src/components/TimeRangeInput.vue +0 -4
- package/src/components/Tooltip.story.vue +3 -3
- package/src/components/Tooltip.vue +0 -4
- package/src/components/UnitInput.vue +0 -4
- package/src/components/WellPlate.geometry.ts +60 -1
- package/src/components/WellPlate.interaction.ts +44 -0
- package/src/components/WellPlate.story.vue +8 -0
- package/src/components/WellPlate.vue +53 -7
- package/src/components/index.ts +9 -0
- package/src/components/internal/AppTopBarPageSelectorInternal.vue +2 -5
- package/src/components/internal/AppTopBarPillNavInternal.vue +0 -4
- package/src/components/internal/DataStateInternal.vue +74 -0
- package/src/components/internal/FormSectionRenderer.vue +0 -4
- package/src/components/internal/WellEditPopupInternal.vue +20 -5
- package/src/components/internal/WorkspaceControlsInternal.vue +20 -0
- package/src/components/internal/WorkspaceShellInternal.vue +125 -0
- package/src/components/internal/WorkspaceSidebarInternal.vue +82 -0
- package/src/composables/controlSchemaTypes.ts +34 -0
- package/src/composables/experimentDesignData.ts +1 -3
- package/src/composables/flattenWorkspaceBindings.ts +104 -0
- package/src/composables/formBuilderRegistry.ts +5 -0
- package/src/composables/index.ts +43 -0
- package/src/composables/pluginWorkspaceModel.ts +182 -0
- package/src/composables/useAsync.ts +5 -1
- package/src/composables/useAuth.ts +3 -0
- package/src/composables/useBioTemplatePackWorkspace.ts +15 -9
- package/src/composables/useBioTemplatePresetWorkspace.ts +14 -15
- package/src/composables/useBioTemplateWorkspace.ts +18 -43
- package/src/composables/useCommandHistory.ts +5 -1
- package/src/composables/useDropdownState.ts +35 -5
- package/src/composables/useEventStream.ts +14 -2
- package/src/composables/useFileImport.ts +2 -7
- package/src/composables/useFocusTrap.ts +91 -0
- package/src/composables/useGeneratedAnalysis.ts +22 -10
- package/src/composables/useJobsStatusTray.ts +184 -17
- package/src/composables/useListReorder.story.vue +143 -0
- package/src/composables/useListReorder.ts +242 -0
- package/src/composables/useMenuKeyboard.ts +90 -0
- package/src/composables/useOptimisticMutation.ts +6 -16
- package/src/composables/usePluginClient.ts +47 -4
- package/src/composables/usePluginConfig.ts +252 -0
- package/src/composables/usePluginWorkspace.ts +208 -0
- package/src/composables/useRackEditor.ts +2 -11
- package/src/composables/useRequestSyncState.ts +98 -28
- package/src/composables/useResourceCrud.ts +6 -16
- package/src/composables/useRovingFocus.ts +66 -0
- package/src/composables/useScheduleDrag.ts +37 -0
- package/src/composables/useWellPainting.ts +10 -30
- package/src/composables/useWellPlateAdapter.ts +5 -1
- package/src/composables/useWellPlateEditor.ts +1 -11
- package/src/composables/useWellPlateValidation.ts +5 -1
- package/src/composables/workspaceRecipes.ts +267 -0
- package/src/index.ts +16 -0
- package/src/permissions.ts +48 -9
- package/src/stores/auth.ts +1 -0
- package/src/stores/experiment.ts +2 -7
- package/src/stores/index.ts +9 -1
- package/src/stores/settings.ts +93 -1
- package/src/styles/components/audit-trail.css +5 -5
- package/src/styles/components/batch-progress-list.css +7 -0
- package/src/styles/components/color-slider.css +2 -2
- package/src/styles/components/data-state.css +30 -0
- package/src/styles/components/dataframe.css +29 -35
- package/src/styles/components/experiment-data-viewer.css +4 -4
- package/src/styles/components/experiment-timeline.css +3 -30
- package/src/styles/components/form-builder.css +5 -5
- package/src/styles/components/lcms-sequence-table.css +16 -1
- package/src/styles/components/multi-select.css +1 -1
- package/src/styles/components/reagent-list.css +38 -31
- package/src/styles/components/sample-hierarchy-tree.css +5 -19
- package/src/styles/components/sample-selector.css +9 -2
- package/src/styles/components/schedule-calendar.css +8 -0
- package/src/styles/components/scientific-number.css +1 -1
- package/src/styles/components/secret-input.css +60 -0
- package/src/styles/components/well-plate.css +8 -0
- package/src/styles/index.css +9 -0
- package/src/styles/variables.css +29 -0
- package/src/templates/builderPresetControls.ts +1 -1
- package/src/templates/builderReadUtils.ts +1 -3
- package/src/templates/componentPlateHelpers.ts +3 -1
- package/src/templates/componentTargetResolvers.ts +1 -3
- package/src/templates/controlSchemaTargets.ts +1 -3
- package/src/templates/doseResponseAdapters.ts +2 -13
- package/src/templates/elisaAssayCollectionBuilder.ts +2 -2
- package/src/templates/plateMapBuilder.ts +2 -2
- package/src/templates/qpcrPlateBuilder.ts +1 -1
- package/src/templates/templateValidators.ts +1 -1
- package/src/templates/timeCourseBuilder.ts +2 -2
- package/src/templates/wellPlateScreenCollectionBuilder.ts +2 -2
- package/src/types/auth.ts +1 -0
- package/src/types/form-builder.ts +1 -0
- package/src/utils/color.ts +51 -0
- package/src/utils/errors.ts +29 -0
- package/src/utils/formModelSync.ts +1 -3
- package/src/utils/pluginIcon.ts +1 -3
- package/src/utils/pluginSecrets.ts +102 -0
- package/src/utils/records.ts +9 -0
- package/dist/EmptyState-p90quq8Z.js.map +0 -1
- package/dist/ExperimentPopover-tLwJ7XF4.js.map +0 -1
- package/dist/ExperimentSelectorModal-DyPAUCLw.js.map +0 -1
- package/dist/SettingsModal-BgKY93zh.js.map +0 -1
- package/dist/components-DkHddRMl.js.map +0 -1
- package/dist/composables/autoGroupConstants.d.ts +0 -1
- package/dist/composables/autoGroupGrouping.d.ts +0 -3
- package/dist/composables/useAutoGroupInputSources.d.ts +0 -32
- package/dist/composables-C_i90sGS.js.map +0 -1
- package/dist/experiment-Cq145oEW.js.map +0 -1
- package/dist/experiment-utils-CLnzPPq5.js.map +0 -1
- package/dist/templates/builderDefaults.d.ts +0 -1
- package/dist/templates/plateGeometry.d.ts +0 -4
- package/dist/templates-DsP51i-S.js.map +0 -1
- package/dist/useApi-J6zFkHmn.js.map +0 -1
- package/dist/useControlSchema-BDx2Olha.js.map +0 -1
- package/dist/useDropdownState-DSb3BC3N.js.map +0 -1
- package/dist/useProtocolTemplates-CS_SQl6U.js.map +0 -1
- package/src/__tests__/composables/useAutoGroupInputSources.test.ts +0 -127
- package/src/composables/autoGroupConstants.ts +0 -4
- package/src/composables/autoGroupGrouping.ts +0 -148
- package/src/composables/useAutoGroupInputSources.ts +0 -147
- package/src/templates/builderDefaults.ts +0 -11
- package/src/templates/plateGeometry.ts +0 -62
- /package/dist/__tests__/{composables/useAutoGroupInputSources.test.d.ts → components/DataStates.test.d.ts} +0 -0
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import { Ref } from 'vue';
|
|
2
|
+
/** Inline style for a visually hidden `aria-live` region (no global utility class in the SDK). */
|
|
3
|
+
export declare const REORDER_ANNOUNCER_STYLE: Readonly<{
|
|
4
|
+
position: "absolute";
|
|
5
|
+
width: "1px";
|
|
6
|
+
height: "1px";
|
|
7
|
+
padding: "0";
|
|
8
|
+
margin: "-1px";
|
|
9
|
+
overflow: "hidden";
|
|
10
|
+
clip: "rect(0, 0, 0, 0)";
|
|
11
|
+
whiteSpace: "nowrap";
|
|
12
|
+
border: "0";
|
|
13
|
+
}>;
|
|
14
|
+
export interface UseReorderAnnouncerReturn {
|
|
15
|
+
/** Bind to a polite live region's text content. */
|
|
16
|
+
announcement: Ref<string>;
|
|
17
|
+
/** Publishes a message to the live region. */
|
|
18
|
+
announce: (message: string) => void;
|
|
19
|
+
/** Bind to the live region's `style` so it stays visually hidden. */
|
|
20
|
+
announcerStyle: typeof REORDER_ANNOUNCER_STYLE;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Screen-reader announcements for drag/keyboard move interactions. Bind
|
|
24
|
+
* `announcement` to a `role="status" aria-live="polite"` element styled with
|
|
25
|
+
* `announcerStyle`.
|
|
26
|
+
*/
|
|
27
|
+
export declare function useReorderAnnouncer(): UseReorderAnnouncerReturn;
|
|
28
|
+
export interface ListReorderMove<T> {
|
|
29
|
+
/** Index the item moved from, within `items()`. */
|
|
30
|
+
fromIndex: number;
|
|
31
|
+
/** Index the item moved to, within `items()`. */
|
|
32
|
+
toIndex: number;
|
|
33
|
+
/** The reordered array (a copy — `items()` is never mutated). */
|
|
34
|
+
items: T[];
|
|
35
|
+
/** Whether the move came from the keyboard or a pointer drag. */
|
|
36
|
+
source: 'keyboard' | 'drag';
|
|
37
|
+
}
|
|
38
|
+
export interface UseListReorderOptions<T> {
|
|
39
|
+
/** The list being reordered, in its canonical (not merely rendered) order. */
|
|
40
|
+
items: () => T[];
|
|
41
|
+
/** Stable id for an item; falls back to the render index when ids repeat. */
|
|
42
|
+
getId: (item: T, index: number) => string;
|
|
43
|
+
/** Applies the move. The composable never mutates the source array. */
|
|
44
|
+
onReorder: (move: ListReorderMove<T>) => void;
|
|
45
|
+
/** Human-readable name used in announcements. Defaults to the item's id. */
|
|
46
|
+
getLabel?: (item: T, index: number) => string;
|
|
47
|
+
/** Blocks every reorder while it returns `true` (readonly / non-sortable lists). */
|
|
48
|
+
disabled?: () => boolean;
|
|
49
|
+
/** Resolves the focusable element for an id so keyboard moves keep focus on the item. */
|
|
50
|
+
getElement?: (id: string) => HTMLElement | null | undefined;
|
|
51
|
+
/** Noun used in announcements, e.g. `'Reagent'`. Default `'Item'`. */
|
|
52
|
+
itemNoun?: string;
|
|
53
|
+
}
|
|
54
|
+
export interface UseListReorderReturn<T> {
|
|
55
|
+
/** Id of the item currently being dragged, or `null`. */
|
|
56
|
+
draggingId: Ref<string | null>;
|
|
57
|
+
/** Id of the item the pointer is hovering as a drop target, or `null`. */
|
|
58
|
+
dragOverId: Ref<string | null>;
|
|
59
|
+
isDragging: (id: string) => boolean;
|
|
60
|
+
isDragOver: (id: string) => boolean;
|
|
61
|
+
announcement: Ref<string>;
|
|
62
|
+
announcerStyle: typeof REORDER_ANNOUNCER_STYLE;
|
|
63
|
+
announce: (message: string) => void;
|
|
64
|
+
/** Bind to the draggable element's `@dragstart`. */
|
|
65
|
+
onDragStart: (event: DragEvent, item: T, index: number) => void;
|
|
66
|
+
/** Bind to `@dragover` — calls `preventDefault()` so the drop is accepted. */
|
|
67
|
+
onDragOver: (event: DragEvent, item: T, index: number) => void;
|
|
68
|
+
/** Bind to `@dragleave`. */
|
|
69
|
+
onDragLeave: () => void;
|
|
70
|
+
/** Bind to `@drop`. */
|
|
71
|
+
onDrop: (event: DragEvent, item: T, index: number) => void;
|
|
72
|
+
/** Bind to `@dragend`. */
|
|
73
|
+
onDragEnd: () => void;
|
|
74
|
+
/**
|
|
75
|
+
* Bind to the item's (or its drag handle's) `@keydown`: Alt+ArrowUp / Alt+ArrowLeft
|
|
76
|
+
* moves the item one position earlier, Alt+ArrowDown / Alt+ArrowRight one later.
|
|
77
|
+
*/
|
|
78
|
+
onKeydown: (event: KeyboardEvent, item: T, index: number) => void;
|
|
79
|
+
/** Moves an item between two indices of `items()` programmatically. */
|
|
80
|
+
move: (fromIndex: number, toIndex: number, source?: 'keyboard' | 'drag') => void;
|
|
81
|
+
}
|
|
82
|
+
/** Pure helper: a copy of `items` with the entry at `from` moved to `to`. */
|
|
83
|
+
export declare function reorderList<T>(items: T[], from: number, to: number): T[];
|
|
84
|
+
/**
|
|
85
|
+
* Keyboard-accessible list reordering shared by the SDK's drag-to-reorder lists.
|
|
86
|
+
* It owns the HTML5 drag state, the drop-index maths, and an Alt+Arrow keyboard
|
|
87
|
+
* alternative that announces every move through a polite live region — so a
|
|
88
|
+
* reorder never depends on a pointer.
|
|
89
|
+
*/
|
|
90
|
+
export declare function useListReorder<T>(options: UseListReorderOptions<T>): UseListReorderReturn<T>;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
export interface UseMenuKeyboardOptions {
|
|
2
|
+
/** Returns the currently navigable items inside the open panel, in DOM order. */
|
|
3
|
+
items: () => HTMLElement[];
|
|
4
|
+
/** True while the panel is open. */
|
|
5
|
+
isOpen: () => boolean;
|
|
6
|
+
/** Opens the panel. */
|
|
7
|
+
open: () => void;
|
|
8
|
+
/** Closes the panel. When `returnFocus` is true, focus should return to the trigger. */
|
|
9
|
+
close: (returnFocus?: boolean) => void;
|
|
10
|
+
}
|
|
11
|
+
export interface UseMenuKeyboardReturn {
|
|
12
|
+
/**
|
|
13
|
+
* Bind to the trigger's `@keydown`. ArrowDown/Enter/Space open the panel (when
|
|
14
|
+
* closed) and focus its first item; ArrowUp opens it focused on the last item.
|
|
15
|
+
*/
|
|
16
|
+
handleTriggerKeydown: (event: KeyboardEvent) => void;
|
|
17
|
+
/**
|
|
18
|
+
* Bind to the open panel's `@keydown`. ArrowUp/ArrowDown cycle focus with
|
|
19
|
+
* wraparound, Home/End jump to the first/last item, Escape closes and returns
|
|
20
|
+
* focus to the trigger, and Tab closes without moving focus.
|
|
21
|
+
*/
|
|
22
|
+
handlePanelKeydown: (event: KeyboardEvent) => void;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Shared keyboard contract for menu- and listbox-style disclosure panels (the
|
|
26
|
+
* WAI-ARIA menu button pattern). Used by ActionMenu, AppAvatarMenu and DropdownButton,
|
|
27
|
+
* each pairing it with `useDropdownState` for the disclosure state itself.
|
|
28
|
+
*/
|
|
29
|
+
export declare function useMenuKeyboard(options: UseMenuKeyboardOptions): UseMenuKeyboardReturn;
|
|
@@ -24,5 +24,9 @@ export interface UseOptimisticMutationReturn<TVariables, TData, TSnapshot = unkn
|
|
|
24
24
|
clearError: () => void;
|
|
25
25
|
reset: () => void;
|
|
26
26
|
}
|
|
27
|
-
/**
|
|
27
|
+
/**
|
|
28
|
+
* Run async mutations with optional optimistic local updates and rollback.
|
|
29
|
+
*
|
|
30
|
+
* @deprecated Unused by the MINT platform and scheduled for removal in MINT 1.3; use `useRequestSyncState()` instead.
|
|
31
|
+
*/
|
|
28
32
|
export declare function useOptimisticMutation<TVariables, TData, TSnapshot = unknown>(options: UseOptimisticMutationOptions<TVariables, TData, TSnapshot>): UseOptimisticMutationReturn<TVariables, TData, TSnapshot>;
|
|
@@ -209,6 +209,8 @@ export declare function createPluginClient<TClient extends object = GeneratedPlu
|
|
|
209
209
|
export declare function uploadPluginEndpoint<TResponse = unknown>(contract: PluginContract, endpoint: PluginEndpointDefinition, payload?: unknown, options?: PluginEndpointRequestOptions): Promise<TResponse>;
|
|
210
210
|
/** Fetch a generated plugin endpoint as a Blob and optionally trigger a browser download. */
|
|
211
211
|
export declare function downloadPluginEndpoint(contract: PluginContract, endpoint: PluginEndpointDefinition, payload?: unknown, options?: DownloadPluginEndpointOptions): Promise<Blob>;
|
|
212
|
+
/** @deprecated Use `useGeneratedPluginClient()` for generated clients. */
|
|
213
|
+
export declare function usePluginClient<TClient>(client: TClient): TClient;
|
|
212
214
|
/** Load, edit, and persist plugin settings from platform config or the plugin-local settings router. */
|
|
213
215
|
export declare function usePluginSettings<TSettings = Record<string, unknown>>(options?: UsePluginSettingsOptions | string): UsePluginSettingsReturn<TSettings>;
|
|
214
216
|
/** Consume a generated plugin SSE endpoint with auth headers, reconnect, and teardown. */
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { Ref, ComputedRef } from 'vue';
|
|
2
|
+
export interface UsePluginConfigReturn {
|
|
3
|
+
/** Editable plugin configuration values. */
|
|
4
|
+
config: Ref<Record<string, unknown>>;
|
|
5
|
+
/** Whether the config is currently loading. */
|
|
6
|
+
isLoading: Ref<boolean>;
|
|
7
|
+
/** Whether the config is currently saving. */
|
|
8
|
+
isSaving: Ref<boolean>;
|
|
9
|
+
/** Error message from the last failed operation, or null. */
|
|
10
|
+
error: Ref<string | null>;
|
|
11
|
+
/** Timestamp of the last successful load, or null. */
|
|
12
|
+
lastLoadedAt: Ref<Date | null>;
|
|
13
|
+
/** Timestamp of the last successful save, or null. */
|
|
14
|
+
lastSavedAt: Ref<Date | null>;
|
|
15
|
+
/** Whether local config differs from the last loaded or saved snapshot. */
|
|
16
|
+
isDirty: ComputedRef<boolean>;
|
|
17
|
+
/** Load plugin configuration from the platform. */
|
|
18
|
+
load: () => Promise<void>;
|
|
19
|
+
/** Save plugin configuration to the platform. */
|
|
20
|
+
save: () => Promise<boolean>;
|
|
21
|
+
/** Restore the last loaded or saved configuration snapshot. */
|
|
22
|
+
reset: () => void;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* @deprecated Unused by the MINT platform and scheduled for removal in MINT 1.3; use `usePluginSettings()` for typed plugin settings.
|
|
26
|
+
*/
|
|
27
|
+
export declare function usePluginConfig(pluginName?: string): UsePluginConfigReturn;
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { ComputedRef } from 'vue';
|
|
2
|
+
import { PageSelectorItem, PillNavItem } from '../types';
|
|
3
|
+
import { PluginWorkspaceViewEmit, PluginWorkspaceViewProps } from '../components/PluginWorkspaceView.props';
|
|
4
|
+
import { PluginWorkspaceControlsModel, PluginWorkspaceShellModel, PluginWorkspaceSidebarModel } from './pluginWorkspaceModel';
|
|
5
|
+
/**
|
|
6
|
+
* Loosely-typed view of a component's `useSlots()` result: only slot presence and names are
|
|
7
|
+
* read here, so this accepts any `defineSlots()` shape without fighting Vue's `Slot` render
|
|
8
|
+
* function type. Mirrors the `SlotKeyMap` helper type in PluginWorkspaceView.shell.ts.
|
|
9
|
+
*/
|
|
10
|
+
export type PluginWorkspaceSlotsLike = Readonly<Record<string, unknown>>;
|
|
11
|
+
export interface UsePluginWorkspaceOptions {
|
|
12
|
+
/** PluginWorkspaceView's own reactive props object (from `defineProps`). */
|
|
13
|
+
props: PluginWorkspaceViewProps;
|
|
14
|
+
/** PluginWorkspaceView's own slots (from `useSlots()`), used to detect provided passthrough slots. */
|
|
15
|
+
slots: PluginWorkspaceSlotsLike;
|
|
16
|
+
/** PluginWorkspaceView's own typed `emit` function (from `defineEmits<PluginWorkspaceViewEmits>()`). */
|
|
17
|
+
emit: PluginWorkspaceViewEmit;
|
|
18
|
+
}
|
|
19
|
+
export interface UsePluginWorkspaceReturn {
|
|
20
|
+
/** Model consumed by WorkspaceShellInternal's `shell` prop. */
|
|
21
|
+
shell: ComputedRef<PluginWorkspaceShellModel>;
|
|
22
|
+
/** Model consumed by WorkspaceSidebarInternal's `sidebar` prop. */
|
|
23
|
+
sidebar: ComputedRef<PluginWorkspaceSidebarModel>;
|
|
24
|
+
/** Model consumed by WorkspaceControlsInternal's `controls` prop, and by the raw `default` slot. */
|
|
25
|
+
controls: ComputedRef<PluginWorkspaceControlsModel>;
|
|
26
|
+
/** Whether AppLayout should render a sidebar surface at all. */
|
|
27
|
+
hasSidebarSurface: ComputedRef<boolean>;
|
|
28
|
+
/** Applies an AppSidebar `update:model-value` payload to the shared control values and emits `update:modelValue`/`update:values`. */
|
|
29
|
+
handleControlValuesUpdate: (values: Record<string, unknown>) => void;
|
|
30
|
+
/** Resolves an AppTopBar `page-selector-select` payload into the active view and emits `page-selector-select`. */
|
|
31
|
+
handlePageSelectorSelect: (page: PageSelectorItem) => void;
|
|
32
|
+
/** Resolves an AppTopBar `pill-select` payload into the active view and emits `pill-select`. */
|
|
33
|
+
handlePillSelect: (item: PillNavItem) => void;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Maps PluginWorkspaceView's flat 72-prop surface into the three typed model objects
|
|
37
|
+
* (`shell`, `sidebar`, `controls`) rendered by its internal pieces
|
|
38
|
+
* (WorkspaceShellInternal, WorkspaceSidebarInternal, WorkspaceControlsInternal). Reuses the
|
|
39
|
+
* existing `usePluginWorkspaceControls` / `usePluginWorkspaceNavigation` composables and the
|
|
40
|
+
* PluginWorkspaceView.shell slot-detection helpers, so it changes only how that state is
|
|
41
|
+
* assembled and exposed, not the underlying behavior.
|
|
42
|
+
*
|
|
43
|
+
* @example Recommended
|
|
44
|
+
* ```ts
|
|
45
|
+
* const props = withDefaults(defineProps<PluginWorkspaceViewProps>(), { ... })
|
|
46
|
+
* const emit = defineEmits<PluginWorkspaceViewEmits>()
|
|
47
|
+
* const slots = useSlots()
|
|
48
|
+
* const { shell, sidebar, controls } = usePluginWorkspace({ props, slots, emit })
|
|
49
|
+
* ```
|
|
50
|
+
*/
|
|
51
|
+
export declare function usePluginWorkspace(options: UsePluginWorkspaceOptions): UsePluginWorkspaceReturn;
|
|
@@ -1,8 +1,24 @@
|
|
|
1
1
|
import { Ref } from 'vue';
|
|
2
2
|
export type RequestSyncSuccessKind = 'load' | 'save' | 'run';
|
|
3
|
+
/**
|
|
4
|
+
* The unit of work `run()` drives.
|
|
5
|
+
*
|
|
6
|
+
* It receives an `AbortSignal` that fires when the run is superseded by a
|
|
7
|
+
* newer `run()` or by `cancel()`. Zero-argument operations stay valid and
|
|
8
|
+
* simply ignore it.
|
|
9
|
+
*/
|
|
10
|
+
export type RequestSyncOperation<T> = (signal: AbortSignal) => Promise<T>;
|
|
3
11
|
export interface RequestSyncRunOptions {
|
|
4
12
|
success?: RequestSyncSuccessKind;
|
|
5
13
|
errorMessage?: string;
|
|
14
|
+
/**
|
|
15
|
+
* Abort the previously started run when this one starts. Default `true`;
|
|
16
|
+
* pass `false` to let overlapping runs finish their own work (the stale
|
|
17
|
+
* guard on shared state still applies either way).
|
|
18
|
+
*/
|
|
19
|
+
abortPrevious?: boolean;
|
|
20
|
+
/** Caller-owned signal; aborting it aborts this run's signal too. */
|
|
21
|
+
signal?: AbortSignal;
|
|
6
22
|
}
|
|
7
23
|
export interface UseRequestSyncStateReturn {
|
|
8
24
|
/** Whether a request is in progress. */
|
|
@@ -27,8 +43,32 @@ export interface UseRequestSyncStateReturn {
|
|
|
27
43
|
markSaved: (date?: Date) => void;
|
|
28
44
|
/** Mark the operation as successfully run. */
|
|
29
45
|
markRun: (date?: Date) => void;
|
|
30
|
-
/**
|
|
31
|
-
|
|
46
|
+
/**
|
|
47
|
+
* Run a request with shared loading/error handling and optional sync marking.
|
|
48
|
+
*
|
|
49
|
+
* ## Stale-response semantics
|
|
50
|
+
*
|
|
51
|
+
* Every call takes a monotonically increasing token. Starting a run
|
|
52
|
+
* supersedes any run started before it, and a superseded run writes **no**
|
|
53
|
+
* shared state when it finally settles: it does not clear `loading`, does not
|
|
54
|
+
* set `error`, and does not move `lastLoadedAt` / `lastSavedAt` / `lastRunAt`.
|
|
55
|
+
* Only the newest run owns those.
|
|
56
|
+
*
|
|
57
|
+
* The caller's own promise is untouched by the guard — a superseded run still
|
|
58
|
+
* resolves with its value or rejects with its own error, exactly as the
|
|
59
|
+
* operation did. The guard never invents a rejection, so a caller awaiting
|
|
60
|
+
* `run()` never sees a "superseded" error it did not cause.
|
|
61
|
+
*
|
|
62
|
+
* The operation additionally receives an `AbortSignal` that fires when its
|
|
63
|
+
* run is superseded or `cancel()` is called, so an operation that forwards
|
|
64
|
+
* the signal (`fetch(url, { signal })`) stops work instead of racing.
|
|
65
|
+
*/
|
|
66
|
+
run: <T>(operation: RequestSyncOperation<T>, options?: RequestSyncRunOptions) => Promise<T>;
|
|
67
|
+
/**
|
|
68
|
+
* Abort the in-flight run and drop `loading`. The aborted run's completion
|
|
69
|
+
* is treated as stale and writes no state.
|
|
70
|
+
*/
|
|
71
|
+
cancel: () => void;
|
|
32
72
|
}
|
|
33
73
|
/** Shared loading/error/timestamp state for generated plugin request helpers. */
|
|
34
74
|
export declare function useRequestSyncState(defaultErrorMessage?: string): UseRequestSyncStateReturn;
|
|
@@ -28,7 +28,11 @@ export interface UseResourceCrudReturn<TItem, TCreate, TUpdate, TKey extends Res
|
|
|
28
28
|
removeLocal: (keyOrItem: TKey | TItem) => void;
|
|
29
29
|
clearError: () => void;
|
|
30
30
|
}
|
|
31
|
-
/**
|
|
31
|
+
/**
|
|
32
|
+
* Common list/create/update/delete state wrapper for generated plugin clients.
|
|
33
|
+
*
|
|
34
|
+
* @deprecated Unused by the MINT platform and scheduled for removal in MINT 1.3; use `useGeneratedPluginClient()` instead.
|
|
35
|
+
*/
|
|
32
36
|
export declare function useResourceCrud<TItem, TCreate = Partial<TItem>, TUpdate = Partial<TItem>, TKey extends ResourceKey = ResourceKey>(options: UseResourceCrudOptions<TItem, TCreate, TUpdate, TKey>): UseResourceCrudReturn<TItem, TCreate, TUpdate, TKey>;
|
|
33
37
|
export interface PluginResourceClientOptions<TClient, TItem, TCreate = Partial<TItem>, TUpdate = Partial<TItem>, TKey extends ResourceKey = ResourceKey> {
|
|
34
38
|
client: TClient;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
export interface UseRovingFocusOptions {
|
|
2
|
+
/** Selectable item ids, in DOM order. Already excludes items skipped entirely (e.g. disabled tabs). */
|
|
3
|
+
ids: () => string[];
|
|
4
|
+
/** The id that is currently active/selected. */
|
|
5
|
+
activeId: () => string | undefined;
|
|
6
|
+
/** Activates an id (e.g. emit `update:modelValue`). The composable focuses the matching element afterward. */
|
|
7
|
+
activate: (id: string) => void;
|
|
8
|
+
/** Returns the focusable element for an id, queried lazily so it reflects the post-activation DOM. */
|
|
9
|
+
getElement: (id: string) => HTMLElement | null | undefined;
|
|
10
|
+
/** Arrow-key axis: `'horizontal'` (Left/Right, default) or `'vertical'` (Up/Down). */
|
|
11
|
+
orientation?: 'horizontal' | 'vertical';
|
|
12
|
+
}
|
|
13
|
+
export interface UseRovingFocusReturn {
|
|
14
|
+
/** Bind to each item's `@keydown`. */
|
|
15
|
+
handleKeydown: (event: KeyboardEvent) => void;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* WAI-ARIA roving-tabindex navigation with automatic activation (the tabs pattern):
|
|
19
|
+
* Left/Right (or Up/Down when `orientation` is `'vertical'`) move to the adjacent item
|
|
20
|
+
* and activate it immediately, wrapping past the ends; Home/End jump to the first/last
|
|
21
|
+
* item. Only the active item should carry `tabindex="0"`; give every other item
|
|
22
|
+
* `tabindex="-1"`. Used by BaseTabs.
|
|
23
|
+
*/
|
|
24
|
+
export declare function useRovingFocus(options: UseRovingFocusOptions): UseRovingFocusReturn;
|
|
@@ -75,4 +75,5 @@ export declare function useScheduleDrag(options: UseScheduleDragOptions): {
|
|
|
75
75
|
startCreate: (date: Date, y: number, dayIndex: number) => void;
|
|
76
76
|
startMove: (event: ScheduleEvent, y: number, dayIndex: number) => void;
|
|
77
77
|
startResize: (event: ScheduleEvent, edge: "top" | "bottom", y: number, dayIndex: number) => void;
|
|
78
|
+
nudgeEvent: (event: ScheduleEvent, direction: -1 | 1, mode?: "move" | "resize") => boolean;
|
|
78
79
|
};
|
|
@@ -28,7 +28,11 @@ export interface UseWellPaintingReturn<TMode extends string = string, TPayload =
|
|
|
28
28
|
onWellMouseUp: () => void;
|
|
29
29
|
cancel: () => void;
|
|
30
30
|
}
|
|
31
|
-
/**
|
|
31
|
+
/**
|
|
32
|
+
* Pointer painting/rectangle selection state for WellPlate-based editors.
|
|
33
|
+
*
|
|
34
|
+
* @deprecated Unused by the MINT platform and scheduled for removal in MINT 1.3; use `useWellPlateEditor()` instead.
|
|
35
|
+
*/
|
|
32
36
|
export declare function useWellPainting<TMode extends string = string, TPayload = unknown>(options: UseWellPaintingOptions<TMode, TPayload>): UseWellPaintingReturn<TMode, TPayload>;
|
|
33
37
|
export declare function wellIdToCoordinate(wellId: string): WellCoordinate | null;
|
|
34
38
|
export declare function coordinateToWellId(coord: WellCoordinate): string;
|
|
@@ -19,7 +19,11 @@ export interface WellPlateAdapterOptions<TEntry> {
|
|
|
19
19
|
export interface UseWellPlateAdapterReturn {
|
|
20
20
|
wells: ComputedRef<Record<string, Partial<Well>>>;
|
|
21
21
|
}
|
|
22
|
-
/**
|
|
22
|
+
/**
|
|
23
|
+
* Convert domain rows into WellPlate's wells prop without hand-written adapters.
|
|
24
|
+
*
|
|
25
|
+
* @deprecated Unused by the MINT platform and scheduled for removal in MINT 1.3; use `useWellPlateEditor()` instead.
|
|
26
|
+
*/
|
|
23
27
|
export declare function useWellPlateAdapter<TEntry>(options: WellPlateAdapterOptions<TEntry>): UseWellPlateAdapterReturn;
|
|
24
28
|
export declare function createWellPlateWells<TEntry>(entries: readonly TEntry[], options: Omit<WellPlateAdapterOptions<TEntry>, 'entries'>): Record<string, Partial<Well>>;
|
|
25
29
|
export interface AxisConditionEntry {
|
|
@@ -22,6 +22,10 @@ export interface UseWellPlateValidationReturn<TType extends string = string> {
|
|
|
22
22
|
warningCount: ComputedRef<number>;
|
|
23
23
|
errorCount: ComputedRef<number>;
|
|
24
24
|
}
|
|
25
|
-
/**
|
|
25
|
+
/**
|
|
26
|
+
* Rule-driven validation state for WellPlate layout/design screens.
|
|
27
|
+
*
|
|
28
|
+
* @deprecated Unused by the MINT platform and scheduled for removal in MINT 1.3; use `useWellPlateEditor()` instead.
|
|
29
|
+
*/
|
|
26
30
|
export declare function useWellPlateValidation<TContext, TType extends string = string>(options: UseWellPlateValidationOptions<TContext, TType>): UseWellPlateValidationReturn<TType>;
|
|
27
31
|
export declare function runWellPlateValidation<TContext, TType extends string = string>(context: TContext, rules: readonly WellPlateValidationRule<TContext, TType>[]): WellPlateValidationWarning<TType>[];
|
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
import { TopBarVariant } from '../types';
|
|
2
|
+
import { FormEnhancements } from '../types/form-builder';
|
|
3
|
+
import { ControlModel, ControlModelBinding, ControlSchema, ControlWorkspaceOptions, UseControlWorkspaceReturn } from './useControlSchema';
|
|
4
|
+
/**
|
|
5
|
+
* Merges `initialValues`/external `modelValue`/`values` on top of a base
|
|
6
|
+
* `ControlWorkspaceOptions.initialValues`, matching the layering FormBuilder expects: base
|
|
7
|
+
* defaults, then caller-supplied initial values, then live external values win last. Shared by
|
|
8
|
+
* {@link controlWorkspaceProps} and {@link bioTemplatePresetWorkspaceProps} so both "generate a
|
|
9
|
+
* workspace from options, initialValues, and v-model" views merge options identically.
|
|
10
|
+
*/
|
|
11
|
+
export declare function resolveControlOptionsWithExternalValues<TOptions extends ControlWorkspaceOptions>(base: TOptions, initialValues: Record<string, unknown> | undefined, externalValues: Record<string, unknown> | undefined): TOptions;
|
|
12
|
+
export interface ControlWorkspaceModelProps {
|
|
13
|
+
model?: ControlModel | ControlModelBinding;
|
|
14
|
+
controls?: ControlSchema;
|
|
15
|
+
controlOptions?: ControlWorkspaceOptions;
|
|
16
|
+
initialValues?: Record<string, unknown>;
|
|
17
|
+
modelValue?: Record<string, unknown>;
|
|
18
|
+
values?: Record<string, unknown>;
|
|
19
|
+
}
|
|
20
|
+
export interface ResolvedControlWorkspaceModel {
|
|
21
|
+
/** `modelValue` if provided, else `values` — the single external v-model source of truth. */
|
|
22
|
+
externalValues: Record<string, unknown> | undefined;
|
|
23
|
+
/** `model` resolved through `resolveControlModel()`, or undefined for a raw `controls` schema. */
|
|
24
|
+
resolvedModel: ControlModelBinding | undefined;
|
|
25
|
+
/** `controls` if provided, else the resolved model's controls, else `{}`. */
|
|
26
|
+
resolvedControls: ControlSchema;
|
|
27
|
+
/** `controlOptions` merged over the resolved model's own options, with initialValues/external values layered on top. */
|
|
28
|
+
resolvedControlOptions: ControlWorkspaceOptions;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Resolves ControlWorkspaceView's `model`/`controls`/`controlOptions`/`initialValues`/
|
|
32
|
+
* `modelValue`/`values` props into the schema + options pair `useControlWorkspace()` needs.
|
|
33
|
+
* Pure and framework-free so callers wrap each field in their own `computed()`.
|
|
34
|
+
*
|
|
35
|
+
* @example Recommended
|
|
36
|
+
* ```ts
|
|
37
|
+
* const resolved = computed(() => controlWorkspaceProps(props))
|
|
38
|
+
* const resolvedControls = computed(() => resolved.value.resolvedControls)
|
|
39
|
+
* ```
|
|
40
|
+
*/
|
|
41
|
+
export declare function controlWorkspaceProps(props: ControlWorkspaceModelProps): ResolvedControlWorkspaceModel;
|
|
42
|
+
export interface DoseDesignWorkspacePassthroughProps {
|
|
43
|
+
workspace?: UseControlWorkspaceReturn<ControlSchema>;
|
|
44
|
+
controlOptions?: ControlWorkspaceOptions;
|
|
45
|
+
initialValues?: Record<string, unknown>;
|
|
46
|
+
modelValue?: Record<string, unknown>;
|
|
47
|
+
values?: Record<string, unknown>;
|
|
48
|
+
title?: string;
|
|
49
|
+
subtitle?: string;
|
|
50
|
+
topBarVariant?: TopBarVariant;
|
|
51
|
+
sidebarWidth?: string;
|
|
52
|
+
sidebarVariant?: 'default' | 'analysis';
|
|
53
|
+
responsiveSidebar?: boolean;
|
|
54
|
+
sidebarPosition?: 'left' | 'right';
|
|
55
|
+
sidebarTitle?: string;
|
|
56
|
+
sidebarSubtitle?: string;
|
|
57
|
+
sidebarBadge?: string | number;
|
|
58
|
+
floating?: boolean;
|
|
59
|
+
dense?: boolean;
|
|
60
|
+
showSettings?: boolean;
|
|
61
|
+
showFormActions?: boolean;
|
|
62
|
+
formEnhancements?: FormEnhancements<Record<string, unknown>>;
|
|
63
|
+
formLoading?: boolean;
|
|
64
|
+
formDisabled?: boolean;
|
|
65
|
+
formReadonly?: boolean;
|
|
66
|
+
formSize?: 'sm' | 'md' | 'lg';
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Maps DoseDesignWorkspaceView's props straight through to the identically-named
|
|
70
|
+
* ControlWorkspaceView props it wraps — the ~25-key pass-through list that used to be spelled
|
|
71
|
+
* out attribute-by-attribute in the template. `model` is the caller's already-resolved dose
|
|
72
|
+
* design model, not the raw (possibly absent) `props.model`.
|
|
73
|
+
*
|
|
74
|
+
* @example Recommended
|
|
75
|
+
* ```vue
|
|
76
|
+
* <ControlWorkspaceView v-bind="doseDesignWorkspaceProps(props, resolvedModel)" />
|
|
77
|
+
* ```
|
|
78
|
+
*/
|
|
79
|
+
export declare function doseDesignWorkspaceProps(props: DoseDesignWorkspacePassthroughProps, model: ControlModel | ControlModelBinding): {
|
|
80
|
+
model: ControlModel | ControlModelBinding;
|
|
81
|
+
workspace: UseControlWorkspaceReturn<ControlSchema> | undefined;
|
|
82
|
+
controlOptions: ControlWorkspaceOptions | undefined;
|
|
83
|
+
initialValues: Record<string, unknown> | undefined;
|
|
84
|
+
modelValue: Record<string, unknown> | undefined;
|
|
85
|
+
values: Record<string, unknown> | undefined;
|
|
86
|
+
title: string | undefined;
|
|
87
|
+
subtitle: string | undefined;
|
|
88
|
+
topBarVariant: TopBarVariant | undefined;
|
|
89
|
+
sidebarWidth: string | undefined;
|
|
90
|
+
sidebarVariant: "default" | "analysis" | undefined;
|
|
91
|
+
responsiveSidebar: boolean | undefined;
|
|
92
|
+
sidebarPosition: "left" | "right" | undefined;
|
|
93
|
+
sidebarTitle: string | undefined;
|
|
94
|
+
sidebarSubtitle: string | undefined;
|
|
95
|
+
sidebarBadge: string | number | undefined;
|
|
96
|
+
floating: boolean | undefined;
|
|
97
|
+
dense: boolean | undefined;
|
|
98
|
+
showSettings: boolean | undefined;
|
|
99
|
+
showFormActions: boolean | undefined;
|
|
100
|
+
formEnhancements: FormEnhancements<Record<string, unknown>> | undefined;
|
|
101
|
+
formLoading: boolean | undefined;
|
|
102
|
+
formDisabled: boolean | undefined;
|
|
103
|
+
formReadonly: boolean | undefined;
|
|
104
|
+
formSize: "sm" | "md" | "lg" | undefined;
|
|
105
|
+
};
|
|
106
|
+
export interface BioTemplateExperimentWorkspaceStatusProps {
|
|
107
|
+
status?: {
|
|
108
|
+
loading?: boolean;
|
|
109
|
+
saving?: boolean;
|
|
110
|
+
error?: string | null;
|
|
111
|
+
hasExperiment?: boolean;
|
|
112
|
+
currentExperimentId?: number;
|
|
113
|
+
lastLoadedAt?: Date | null;
|
|
114
|
+
lastSavedAt?: Date | null;
|
|
115
|
+
};
|
|
116
|
+
loading?: boolean;
|
|
117
|
+
error?: string | null;
|
|
118
|
+
hasExperiment?: boolean;
|
|
119
|
+
currentExperimentId?: number;
|
|
120
|
+
lastLoadedAt?: Date | null;
|
|
121
|
+
lastSavedAt?: Date | null;
|
|
122
|
+
}
|
|
123
|
+
export interface ResolvedBioTemplateExperimentStatus {
|
|
124
|
+
loading: boolean;
|
|
125
|
+
error: string | null | undefined;
|
|
126
|
+
hasExperiment: boolean;
|
|
127
|
+
currentExperimentId: number | undefined;
|
|
128
|
+
lastLoadedAt: Date | null | undefined;
|
|
129
|
+
lastSavedAt: Date | null | undefined;
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Merges BioTemplateExperimentWorkspaceView's grouped `status` prop over its individual
|
|
133
|
+
* `loading`/`error`/`hasExperiment`/... props: `status` wins whenever the corresponding field
|
|
134
|
+
* on it is set, otherwise the flat prop (or its default) is used. Centralizes the six
|
|
135
|
+
* independent fallback rules generated plugin pages rely on when they pass a request/experiment
|
|
136
|
+
* `status` object instead of wiring each field by hand.
|
|
137
|
+
*/
|
|
138
|
+
export declare function bioTemplateExperimentWorkspaceProps(props: BioTemplateExperimentWorkspaceStatusProps): ResolvedBioTemplateExperimentStatus;
|
|
139
|
+
export interface BioTemplatePackWorkspacePassthroughProps {
|
|
140
|
+
message?: string;
|
|
141
|
+
dense?: boolean;
|
|
142
|
+
readonly?: boolean;
|
|
143
|
+
showStatus?: boolean;
|
|
144
|
+
showTemplateSummary?: boolean;
|
|
145
|
+
loadLabel?: string;
|
|
146
|
+
resetLabel?: string;
|
|
147
|
+
saveLabel?: string;
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Assembles the prop object BioTemplatePackWorkspaceView binds onto the
|
|
151
|
+
* BioTemplateExperimentWorkspaceView it wraps: its own display props passed straight through,
|
|
152
|
+
* plus the pack-derived `target`/`label`/`status`/`actions` computed by the caller.
|
|
153
|
+
*/
|
|
154
|
+
export declare function bioTemplatePackWorkspaceProps<TTarget, TStatus, TActions>(props: BioTemplatePackWorkspacePassthroughProps, derived: {
|
|
155
|
+
target: TTarget;
|
|
156
|
+
label: string;
|
|
157
|
+
status: TStatus;
|
|
158
|
+
actions: TActions;
|
|
159
|
+
}): {
|
|
160
|
+
target: TTarget;
|
|
161
|
+
kind: "collection";
|
|
162
|
+
label: string;
|
|
163
|
+
message: string | undefined;
|
|
164
|
+
status: TStatus;
|
|
165
|
+
actions: TActions;
|
|
166
|
+
dense: boolean | undefined;
|
|
167
|
+
readonly: boolean | undefined;
|
|
168
|
+
showStatus: boolean | undefined;
|
|
169
|
+
showTemplateSummary: boolean | undefined;
|
|
170
|
+
loadLabel: string | undefined;
|
|
171
|
+
resetLabel: string | undefined;
|
|
172
|
+
saveLabel: string | undefined;
|
|
173
|
+
};
|
|
174
|
+
export interface BioTemplatePresetWorkspaceOptionsProps<TOptions extends ControlWorkspaceOptions> {
|
|
175
|
+
workspaceOptions?: TOptions;
|
|
176
|
+
initialValues?: Record<string, unknown>;
|
|
177
|
+
modelValue?: Record<string, unknown>;
|
|
178
|
+
values?: Record<string, unknown>;
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* Resolves BioTemplatePresetWorkspaceView's `workspaceOptions`/`initialValues`/`modelValue`/
|
|
182
|
+
* `values` props into the single options object `useBioTemplatePresetWorkspace()` needs,
|
|
183
|
+
* reusing the same base/initialValues/external-values layering as {@link controlWorkspaceProps}.
|
|
184
|
+
*/
|
|
185
|
+
export declare function bioTemplatePresetWorkspaceProps<TOptions extends ControlWorkspaceOptions>(props: BioTemplatePresetWorkspaceOptionsProps<TOptions>): {
|
|
186
|
+
externalValues: Record<string, unknown> | undefined;
|
|
187
|
+
resolvedWorkspaceOptions: TOptions;
|
|
188
|
+
};
|